mirror of
https://github.com/cachethq/cachet.git
synced 2026-03-05 16:07:02 +00:00
Compare commits
81 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1400d4a04f | ||
|
|
b413e402e5 | ||
|
|
8c627ee037 | ||
|
|
9a0ceb52bf | ||
|
|
a2a36cd080 | ||
|
|
0ea41bed47 | ||
|
|
c14b6d7df7 | ||
|
|
d682a42892 | ||
|
|
8f5afff4a2 | ||
|
|
b045028c7b | ||
|
|
16189da222 | ||
|
|
7596966e6c | ||
|
|
dcea947973 | ||
|
|
d8ea3c59e3 | ||
|
|
a2f8f4540e | ||
|
|
4031c42958 | ||
|
|
8348f48692 | ||
|
|
faf91470aa | ||
|
|
58039634bd | ||
|
|
915ea0d0bd | ||
|
|
a019d82010 | ||
|
|
0f029702d4 | ||
|
|
71b5d446ba | ||
|
|
6246f20506 | ||
|
|
9dcc5d6896 | ||
|
|
235e3281b0 | ||
|
|
04b96e7dec | ||
|
|
e15af44449 | ||
|
|
ef9f7d23a0 | ||
|
|
ef694b027a | ||
|
|
f53e466500 | ||
|
|
1e24138d7a | ||
|
|
9120dba237 | ||
|
|
7f261a218a | ||
|
|
5b5db06ce3 | ||
|
|
b6635d30ee | ||
|
|
5ae23b64d2 | ||
|
|
0d90f0459b | ||
|
|
bcbbee22d9 | ||
|
|
9750191bff | ||
|
|
52c4901a78 | ||
|
|
587555c2d4 | ||
|
|
b4c7fb2ab0 | ||
|
|
e61d24f685 | ||
|
|
88e85d2dfb | ||
|
|
5b72f2febc | ||
|
|
4703aeadb2 | ||
|
|
ef304950bb | ||
|
|
ad8f098ec1 | ||
|
|
2551a1a038 | ||
|
|
3874b533be | ||
|
|
85c0e94408 | ||
|
|
1793f5588a | ||
|
|
46ff13c7fb | ||
|
|
da8c8fae74 | ||
|
|
ff9eb123c6 | ||
|
|
895d1ea1b6 | ||
|
|
503252c3a2 | ||
|
|
ec0f0768f0 | ||
|
|
68cc6eb93c | ||
|
|
fdfebc18fb | ||
|
|
0cd3ea0e92 | ||
|
|
0f10522e9c | ||
|
|
83e1013771 | ||
|
|
7d4bab478f | ||
|
|
18d7af2b35 | ||
|
|
e3cfb47d66 | ||
|
|
716d357738 | ||
|
|
cee336fd7c | ||
|
|
b3497820f9 | ||
|
|
67152806d7 | ||
|
|
5298ad241a | ||
|
|
e2da8ee1fa | ||
|
|
b6c22c1029 | ||
|
|
5c54830b0f | ||
|
|
1a6c22a8a9 | ||
|
|
cb5badefcc | ||
|
|
c25437871a | ||
|
|
e96088fc0f | ||
|
|
7472657812 | ||
|
|
6becaf2acd |
@@ -9,8 +9,6 @@ php:
|
||||
|
||||
sudo: false
|
||||
|
||||
before_install: cp .env.example .env
|
||||
|
||||
install: travis_retry composer install --no-interaction --no-scripts --prefer-source
|
||||
|
||||
script: vendor/bin/phpunit
|
||||
|
||||
46
README.md
46
README.md
@@ -1,14 +1,18 @@
|
||||
# Cachet
|
||||
|
||||
[](https://styleci.io/repos/26730195/)
|
||||
[](https://travis-ci.org/CachetHQ/Cachet)
|
||||
[](https://travis-ci.org/CachetHQ/Cachet)
|
||||
[](LICENSE)
|
||||
[](http://translate.cachethq.io/project/cachet)
|
||||
[](https://packagist.org/packages/cachethq/cachet)
|
||||
|
||||

|
||||
|
||||
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,7 +25,11 @@ 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
|
||||
|
||||
@@ -29,9 +37,9 @@ Cachet is a beautiful and powerful open source status page system.
|
||||
- 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. If you'd like to support future development, check out the [Patreon campaign](https://patreon.com/jbrooksuk).
|
||||
|
||||
## 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
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
*
|
||||
@@ -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,
|
||||
@@ -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([
|
||||
@@ -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,
|
||||
]),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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([
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -11,13 +11,38 @@
|
||||
|
||||
namespace CachetHQ\Cachet\Composers;
|
||||
|
||||
use CachetHQ\Cachet\Integrations\Core\System;
|
||||
use CachetHQ\Cachet\Models\Component;
|
||||
use CachetHQ\Cachet\Models\ComponentGroup;
|
||||
use CachetHQ\Cachet\Models\Incident;
|
||||
use Illuminate\Contracts\View\View;
|
||||
|
||||
/**
|
||||
* This is the status page composer.
|
||||
*
|
||||
* @author James Brooks <james@alt-three.com>
|
||||
*/
|
||||
class StatusPageComposer
|
||||
{
|
||||
/**
|
||||
* The system instance.
|
||||
*
|
||||
* @var \CachetHQ\Cachet\Integrations\Contracts\System
|
||||
*/
|
||||
protected $system;
|
||||
|
||||
/**
|
||||
* Create a new status page composer instance.
|
||||
*
|
||||
* @param \CachetHQ\Cachet\Integrations\Contracts\System $system
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(System $system)
|
||||
{
|
||||
$this->system = $system;
|
||||
}
|
||||
|
||||
/**
|
||||
* Index page view composer.
|
||||
*
|
||||
@@ -27,42 +52,7 @@ class StatusPageComposer
|
||||
*/
|
||||
public function compose(View $view)
|
||||
{
|
||||
$totalComponents = Component::enabled()->count();
|
||||
$majorOutages = Component::enabled()->status(4)->count();
|
||||
$isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) >= 0.5 : false;
|
||||
|
||||
// Default data
|
||||
$withData = [
|
||||
'system_status' => 'info',
|
||||
'system_message' => trans_choice('cachet.service.bad', $totalComponents),
|
||||
'favicon' => 'favicon-high-alert',
|
||||
];
|
||||
|
||||
if ($isMajorOutage) {
|
||||
$withData = [
|
||||
'system_status' => 'danger',
|
||||
'system_message' => trans_choice('cachet.service.major', $totalComponents),
|
||||
'favicon' => 'favicon-high-alert',
|
||||
];
|
||||
} elseif (Component::enabled()->notStatus(1)->count() === 0) {
|
||||
// If all our components are ok, do we have any non-fixed incidents?
|
||||
$incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get()->filter(function ($incident) {
|
||||
return $incident->status > 0;
|
||||
});
|
||||
$incidentCount = $incidents->count();
|
||||
|
||||
if ($incidentCount === 0 || ($incidentCount >= 1 && (int) $incidents->first()->status === 4)) {
|
||||
$withData = [
|
||||
'system_status' => 'success',
|
||||
'system_message' => trans_choice('cachet.service.good', $totalComponents),
|
||||
'favicon' => 'favicon',
|
||||
];
|
||||
}
|
||||
} else {
|
||||
if (Component::enabled()->whereIn('status', [2, 3])->count() > 0) {
|
||||
$withData['favicon'] = 'favicon-medium-alert';
|
||||
}
|
||||
}
|
||||
$status = $this->system->getStatus();
|
||||
|
||||
// Scheduled maintenance code.
|
||||
$scheduledMaintenance = Incident::scheduled()->orderBy('scheduled_at')->get();
|
||||
@@ -72,7 +62,7 @@ class StatusPageComposer
|
||||
$componentGroups = ComponentGroup::whereIn('id', $usedComponentGroups)->orderBy('order')->get();
|
||||
$ungroupedComponents = Component::enabled()->where('group_id', 0)->orderBy('order')->orderBy('created_at')->get();
|
||||
|
||||
$view->with($withData)
|
||||
$view->with($status)
|
||||
->withComponentGroups($componentGroups)
|
||||
->withUngroupedComponents($ungroupedComponents)
|
||||
->withScheduledMaintenance($scheduledMaintenance);
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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' => [
|
||||
//
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
100
app/Foundation/Providers/IntegrationServiceProvider.php
Normal file
100
app/Foundation/Providers/IntegrationServiceProvider.php
Normal file
@@ -0,0 +1,100 @@
|
||||
<?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\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;
|
||||
|
||||
/**
|
||||
* This is the integration service provider.
|
||||
*
|
||||
* @author James Brooks <james@alt-three.com>
|
||||
*/
|
||||
class IntegrationServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the system class.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function registerSystem()
|
||||
{
|
||||
$this->app->singleton(SystemContract::class, function (Container $app) {
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,8 @@
|
||||
|
||||
namespace CachetHQ\Cachet\Http\Controllers\Api;
|
||||
|
||||
use CachetHQ\Cachet\Integrations\Releases;
|
||||
use CachetHQ\Cachet\Integrations\Contracts\Releases;
|
||||
use CachetHQ\Cachet\Integrations\Contracts\System;
|
||||
|
||||
/**
|
||||
* This is the general api controller.
|
||||
@@ -37,11 +38,23 @@ 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,
|
||||
'latest' => $latest,
|
||||
])->item(CACHET_VERSION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the system status message.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function status()
|
||||
{
|
||||
$system = app()->make(System::class)->getStatus();
|
||||
|
||||
return $this->item($system['system_message']);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)',
|
||||
|
||||
@@ -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')))
|
||||
|
||||
@@ -33,6 +33,7 @@ class ApiRoutes
|
||||
$router->group(['middleware' => ['auth.api']], function (Registrar $router) {
|
||||
$router->get('ping', 'GeneralController@ping');
|
||||
$router->get('version', 'GeneralController@version');
|
||||
$router->get('status', 'GeneralController@status');
|
||||
|
||||
$router->get('components', 'ComponentController@getComponents');
|
||||
$router->get('components/groups', 'ComponentGroupController@getGroups');
|
||||
|
||||
@@ -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',
|
||||
|
||||
27
app/Integrations/Contracts/Credits.php
Normal file
27
app/Integrations/Contracts/Credits.php
Normal 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();
|
||||
}
|
||||
27
app/Integrations/Contracts/Feed.php
Normal file
27
app/Integrations/Contracts/Feed.php
Normal 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();
|
||||
}
|
||||
27
app/Integrations/Contracts/Releases.php
Normal file
27
app/Integrations/Contracts/Releases.php
Normal 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();
|
||||
}
|
||||
27
app/Integrations/Contracts/System.php
Normal file
27
app/Integrations/Contracts/System.php
Normal 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 system interface.
|
||||
*
|
||||
* @author James Brooks <james@alt-three.com>
|
||||
*/
|
||||
interface System
|
||||
{
|
||||
/**
|
||||
* Get the entire system status.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getStatus();
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
70
app/Integrations/Core/System.php
Normal file
70
app/Integrations/Core/System.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?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\Core;
|
||||
|
||||
use CachetHQ\Cachet\Integrations\Contracts\System as SystemContract;
|
||||
use CachetHQ\Cachet\Models\Component;
|
||||
use CachetHQ\Cachet\Models\Incident;
|
||||
|
||||
/**
|
||||
* This is the core system class.
|
||||
*
|
||||
* @author James Brooks <james@alt-three.com>
|
||||
*/
|
||||
class System implements SystemContract
|
||||
{
|
||||
/**
|
||||
* Get the entire system status.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
$enabledScope = Component::enabled();
|
||||
$totalComponents = Component::enabled()->count();
|
||||
$majorOutages = Component::enabled()->status(4)->count();
|
||||
$isMajorOutage = $totalComponents ? ($majorOutages / $totalComponents) >= 0.5 : false;
|
||||
|
||||
// Default data
|
||||
$status = [
|
||||
'system_status' => 'info',
|
||||
'system_message' => trans_choice('cachet.service.bad', $totalComponents),
|
||||
'favicon' => 'favicon-high-alert',
|
||||
];
|
||||
|
||||
if ($isMajorOutage) {
|
||||
$status = [
|
||||
'system_status' => 'danger',
|
||||
'system_message' => trans_choice('cachet.service.major', $totalComponents),
|
||||
'favicon' => 'favicon-high-alert',
|
||||
];
|
||||
} elseif (Component::enabled()->notStatus(1)->count() === 0) {
|
||||
// If all our components are ok, do we have any non-fixed incidents?
|
||||
$incidents = Incident::notScheduled()->orderBy('created_at', 'desc')->get()->filter(function ($incident) {
|
||||
return $incident->status > 0;
|
||||
});
|
||||
$incidentCount = $incidents->count();
|
||||
|
||||
if ($incidentCount === 0 || ($incidentCount >= 1 && (int) $incidents->first()->status === 4)) {
|
||||
$status = [
|
||||
'system_status' => 'success',
|
||||
'system_message' => trans_choice('cachet.service.good', $totalComponents),
|
||||
'favicon' => 'favicon',
|
||||
];
|
||||
}
|
||||
} elseif (Component::enabled()->whereIn('status', [2, 3])->count() > 0) {
|
||||
$status['favicon'] = 'favicon-medium-alert';
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"ext-xml": "*",
|
||||
"laravel/framework": "5.2.39",
|
||||
"alt-three/badger": "^3.1",
|
||||
"alt-three/bus": "^1.1",
|
||||
@@ -99,7 +98,7 @@
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.3-dev"
|
||||
"dev-master": "2.5-dev"
|
||||
}
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
|
||||
502
composer.lock
generated
502
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -184,6 +184,7 @@ return [
|
||||
'CachetHQ\Cachet\Foundation\Providers\ComposerServiceProvider',
|
||||
'CachetHQ\Cachet\Foundation\Providers\ConsoleServiceProvider',
|
||||
'CachetHQ\Cachet\Foundation\Providers\ConfigServiceProvider',
|
||||
'CachetHQ\Cachet\Foundation\Providers\IntegrationServiceProvider',
|
||||
'CachetHQ\Cachet\Foundation\Providers\EventServiceProvider',
|
||||
'CachetHQ\Cachet\Foundation\Providers\RepositoryServiceProvider',
|
||||
'CachetHQ\Cachet\Foundation\Providers\RouteServiceProvider',
|
||||
@@ -233,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',
|
||||
|
||||
],
|
||||
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
],
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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 |
@@ -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'),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'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>',
|
||||
'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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'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',
|
||||
'site-timezone' => 'Tidszone',
|
||||
'site-locale' => 'Sprog på siden',
|
||||
'date-format' => 'Datoformat',
|
||||
'incident-date-format' => 'Datoformat for hændelser',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Tilladte domæner',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Du wurdest in das Team :app_name Status Seite eingeladen. Um dich zu registrieren klicke den Link.\n:link\nDanke, :app_name",
|
||||
'html' => '<p>Du wurdest in das Team :app_name Status Seite eingeladen. Um dich zu registrieren klicke den Link.</p><p><a href=":link">:link</a></p><p>Danke, :app_name</p>',
|
||||
'text' => "Du wurdest in das Team :app_name Status Seite eingeladen. Um dich zu registrieren klicke den Link.\n:link\nDanke, :app_name",
|
||||
'html' => '<p>Du wurdest in das Team :app_name Status Seite eingeladen. Um dich zu registrieren klicke den Link.</p><p><a href=":link">:link</a></p><p>Danke, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Piwik\'s Seiten-ID',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Zeitzone ihrer Seite',
|
||||
'site-locale' => 'Sprache ihrer Seite',
|
||||
'date-format' => 'Datumsformat',
|
||||
'incident-date-format' => 'Vorfall Zeitstempel-Format',
|
||||
'site-timezone' => 'Zeitzone ihrer Seite',
|
||||
'site-locale' => 'Sprache ihrer Seite',
|
||||
'date-format' => 'Datumsformat',
|
||||
'incident-date-format' => 'Vorfall Zeitstempel-Format',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Erlaubte Domains',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Έχετε προσκληθεί στη σελίδα ενημερώσεων της ομάδας :app_name, εγγραφείτε στον παρακάτω σύνδεσμο.\n:link\nΕυχαριστούμε, :app_name",
|
||||
'html' => '<p>Έχετε προσκληθεί στη σελίδα ενημερώσεων της ομάδας :app_name, εγγραφείτε στον παρακάτω σύνδεσμο.</p><p><a href=":link">:link</a></p><p>Ευχαριστούμε, :app_name</p>',
|
||||
'text' => "Έχετε προσκληθεί στη σελίδα ενημερώσεων της ομάδας :app_name, εγγραφείτε στον παρακάτω σύνδεσμο.\n:link\nΕυχαριστούμε, :app_name",
|
||||
'html' => '<p>Έχετε προσκληθεί στη σελίδα ενημερώσεων της ομάδας :app_name, εγγραφείτε στον παρακάτω σύνδεσμο.</p><p><a href=":link">:link</a></p><p>Ευχαριστούμε, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => 'crwdns553:0crwdne553:0',
|
||||
'html' => 'crwdns555:0crwdne555:0',
|
||||
'text' => 'crwdns553:0crwdne553:0',
|
||||
'html' => 'crwdns555:0crwdne555:0',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'crwdns594:0crwdne594:0',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'crwdns595:0crwdne595:0',
|
||||
'site-locale' => 'crwdns596:0crwdne596:0',
|
||||
'date-format' => 'crwdns597:0crwdne597:0',
|
||||
'incident-date-format' => 'crwdns598:0crwdne598:0',
|
||||
'site-timezone' => 'crwdns595:0crwdne595:0',
|
||||
'site-locale' => 'crwdns596:0crwdne596:0',
|
||||
'date-format' => 'crwdns597:0crwdne597:0',
|
||||
'incident-date-format' => 'crwdns598:0crwdne598:0',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'crwdns599:0crwdne599:0',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
@@ -136,6 +136,7 @@ return [
|
||||
'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>.',
|
||||
'timezone' => 'Times are shown in :timezone.',
|
||||
'about_this_site' => 'About This Site',
|
||||
'rss-feed' => 'RSS',
|
||||
'atom-feed' => 'Atom',
|
||||
|
||||
@@ -104,17 +104,20 @@ return [
|
||||
|
||||
// Settings
|
||||
'settings' => [
|
||||
/// Application setup
|
||||
// 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?',
|
||||
'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?',
|
||||
'skip_subscriber_verification' => 'Skip verifying of users? (Be warned, you could be spammed)',
|
||||
'automatic_localization' => 'Automatically localise your status page to your visitor\'s language?',
|
||||
'enable_external_dependencies' => 'Enable Third Party Dependencies (Google Fonts, Trackers, etc...)',
|
||||
'show_timezone' => 'Show the timezone the status page is running in.',
|
||||
],
|
||||
'analytics' => [
|
||||
'analytics_google' => 'Google Analytics code',
|
||||
@@ -123,10 +126,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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Te han invitado a la página de estado del equipo de :app_name, para registrarte sigue este enlace.\n:link\nGracias, :app_name",
|
||||
'html' => '<p>Has sido invitado a la página de estado del equipo :app_name, para inscribirte sigue el siguiente enlace.</p><p><a href=":link">:link</a></p><p>Gracias, :app_name</p>',
|
||||
'text' => "Te han invitado a la página de estado del equipo de :app_name, para registrarte sigue este enlace.\n:link\nGracias, :app_name",
|
||||
'html' => '<p>Has sido invitado a la página de estado del equipo :app_name, para inscribirte sigue el siguiente enlace.</p><p><a href=":link">:link</a></p><p>Gracias, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Id de tu sitio Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Zona horaria del sitio',
|
||||
'site-locale' => 'Idioma del sitio',
|
||||
'date-format' => 'Formato de la fecha',
|
||||
'incident-date-format' => 'Formato de fecha de incidente',
|
||||
'site-timezone' => 'Zona horaria del sitio',
|
||||
'site-locale' => 'Idioma del sitio',
|
||||
'date-format' => 'Formato de la fecha',
|
||||
'incident-date-format' => 'Formato de fecha de incidente',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Dominios permitidos',
|
||||
|
||||
@@ -92,8 +92,8 @@ return [
|
||||
'subject' => '[New Incident] :status: :name',
|
||||
],
|
||||
'component' => [
|
||||
'subject' => 'بهروزرسانی وضعیت کامپوننت',
|
||||
'text' => 'کامپوننت :component یک تغییر وضعیت دارد. این کامپوننت هماکنون در حالت :component_human_status قرار دارد.\n
|
||||
'subject' => 'بهروزرسانی وضعیت کامپوننت',
|
||||
'text' => 'کامپوننت :component یک تغییر وضعیت دارد. این کامپوننت هماکنون در حالت :component_human_status قرار دارد.\n
|
||||
با تشکر، :app_name',
|
||||
'html' => '<p> کامپوننت با نام :component_name یک تغییر وضعیت دارد. کامپوننت هماکنون در حالت :component_human_status قرار دارد. </p><p> با تشکر :app_name </p>',
|
||||
'tooltip-title' => 'Subscribe to notifications for :component_name.',
|
||||
@@ -104,8 +104,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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Sinut on kutsuttu ryhmään :app_name tila sivulle, rekisteröi tästä: \n:link\n. Kiitos, :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' => "Sinut on kutsuttu ryhmään :app_name tila sivulle, rekisteröi tästä: \n:link\n. Kiitos, :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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Piwik sivun tunnus',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Sivuston aikavyöhyke',
|
||||
'site-locale' => 'Sivuston kieli',
|
||||
'date-format' => 'Päivämäärän muoto',
|
||||
'incident-date-format' => 'Incident timestamp format',
|
||||
'site-timezone' => 'Sivuston aikavyöhyke',
|
||||
'site-locale' => 'Sivuston kieli',
|
||||
'date-format' => 'Päivämäärän muoto',
|
||||
'incident-date-format' => 'Incident timestamp format',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Sallittu toimialueet',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Vous avez été invité à la page de statut de l'équipe :app_name , veuillez suivre le lien suivant pour vous inscire \n:link\nMerci, :app_name",
|
||||
'html' => '<p>Vous avez été invité à la page de statut de l\'équipe :app_name, veuillez suivre le lien suivant pour vous inscrire.</p><p><a href=":link">:link</a></p><p>Merci, :app_name</p>',
|
||||
'text' => "Vous avez été invité à la page de statut de l'équipe :app_name , veuillez suivre le lien suivant pour vous inscire \n:link\nMerci, :app_name",
|
||||
'html' => '<p>Vous avez été invité à la page de statut de l\'équipe :app_name, veuillez suivre le lien suivant pour vous inscrire.</p><p><a href=":link">:link</a></p><p>Merci, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Id du site de Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Fuseau horaire du site',
|
||||
'site-locale' => 'Langue du site',
|
||||
'date-format' => 'Format de la date',
|
||||
'incident-date-format' => 'Format de la date de l\'incident',
|
||||
'site-timezone' => 'Fuseau horaire du site',
|
||||
'site-locale' => 'Langue du site',
|
||||
'date-format' => 'Format de la date',
|
||||
'incident-date-format' => 'Format de la date de l\'incident',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Domaines autorisés',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Anda diundang dalam tim Halaman Status :app_name, untuk mendaftar silakan klik tautan berikut \n:link\nTerima kasih, :app_name",
|
||||
'html' => '<p>Anda diundang dalam tim Halaman Status :app_name, untuk mendaftar silakan klik tautan berikut. </p><p><a href=":link">:link</a></p><p>Terima kasih, :app_name</p>',
|
||||
'text' => "Anda diundang dalam tim Halaman Status :app_name, untuk mendaftar silakan klik tautan berikut \n:link\nTerima kasih, :app_name",
|
||||
'html' => '<p>Anda diundang dalam tim Halaman Status :app_name, untuk mendaftar silakan klik tautan berikut. </p><p><a href=":link">:link</a></p><p>Terima kasih, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'ID situs Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Zona Waktu',
|
||||
'site-locale' => 'Bahasa',
|
||||
'date-format' => 'Format Tanggal',
|
||||
'incident-date-format' => 'Format Waktu Insiden',
|
||||
'site-timezone' => 'Zona Waktu',
|
||||
'site-locale' => 'Bahasa',
|
||||
'date-format' => 'Format Tanggal',
|
||||
'incident-date-format' => 'Format Waktu Insiden',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Domain yang dibolehkan',
|
||||
|
||||
@@ -81,8 +81,8 @@ return [
|
||||
'failure' => 'Qualcosa è andato storto con l\'iscrizione.',
|
||||
'already-subscribed' => 'Non è possibile iscrivere :email perchè risulta già iscritto.',
|
||||
'verify' => [
|
||||
'text' => "Conferma l'iscrizione a :app_name. \n:link",
|
||||
'html' => 'Per favore conferma la tua iscrizione tramite email su :app_name',
|
||||
'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' => 'Conferma iscrizione',
|
||||
],
|
||||
'maintenance' => [
|
||||
@@ -93,8 +93,8 @@ return [
|
||||
],
|
||||
'component' => [
|
||||
'subject' => 'Aggiornamento di stato del componente',
|
||||
'text' => 'Lo stato del componente: :component_name è cambiato. Il nuovo stato del componente è :component_human_status.\nGrazie, :app_name',
|
||||
'html' => '<p>Lo stato del componente :component_name è cambiato. Il nuovo stato del componente è :component_human_status.</p><p>Grazie, :app_name</p>',
|
||||
'text' => 'Lo stato del componente: nome_componente è cambiato. Il nuovo stato del componente è :component_human_status.\nGrazie,: app_name',
|
||||
'html' => '<p>Lo stato del componente: nome_componente è cambiato. Il nuovo stato del componente è :component_human_status.</p><p>Grazie, :app_name</p>',
|
||||
'tooltip-title' => 'Iscriviti alle notifiche di :component_name.',
|
||||
],
|
||||
],
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Sei stato invitato nel team :app_name status page, per iscriverti segui il prossimo link.\n:link\nGrazie, :app_name",
|
||||
'html' => '<p>Sei stato invitato nel team :app_name status page, per iscriverti segui il prossimo link.</p><p><a href=":link">:link</a></p><p>Grazie, :app_name</p>',
|
||||
'text' => "Sei stato invitato nel team :app_name status page, per iscriverti segui il prossimo link.\n:link\nGrazie, :app_name",
|
||||
'html' => '<p>Sei stato invitato nel team :app_name status page, per iscriverti segui il prossimo link.</p><p><a href=":link">:link</a></p><p>Grazie, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Id del sito Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Fuso orario del sito',
|
||||
'site-locale' => 'Lingua del sito',
|
||||
'date-format' => 'Formato della data',
|
||||
'incident-date-format' => 'Formato timestamp della segnalazione',
|
||||
'site-timezone' => 'Fuso orario del sito',
|
||||
'site-locale' => 'Lingua del sito',
|
||||
'date-format' => 'Formato della data',
|
||||
'incident-date-format' => 'Formato timestamp della segnalazione',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Domini consentiti',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => ":app_name 팀의 상태페이지에 초대되었습니다. 가입하시려면 다음 링크를 눌러주세요.\n:link\n감사합니다, :app_name",
|
||||
'html' => '<p>:app_name 팀의 상태페이지에 초대되었습니다. 가입하시려면 다음 링크를 눌러주세요.</p>
|
||||
'text' => ":app_name 팀의 상태페이지에 초대되었습니다. 가입하시려면 다음 링크를 눌러주세요.\n:link\n감사합니다, :app_name",
|
||||
'html' => '<p>:app_name 팀의 상태페이지에 초대되었습니다. 가입하시려면 다음 링크를 눌러주세요.</p>
|
||||
<p><a href=":link">:link</a></p><p>감사합니다, :app_name</p>',
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Piwik 사이트 id',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => '사이트 시간대',
|
||||
'site-locale' => '사이트 언어',
|
||||
'date-format' => '날짜 형식',
|
||||
'incident-date-format' => '문제 Timestamp 형식',
|
||||
'site-timezone' => '사이트 시간대',
|
||||
'site-locale' => '사이트 언어',
|
||||
'date-format' => '날짜 형식',
|
||||
'incident-date-format' => '문제 Timestamp 형식',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => '허용된 도메인',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "U bent uitgenodigd voor team :app_name status pagina, om u in te schrijven klik op de volgende link.\n:link\nBedankt, :app_name",
|
||||
'html' => '<p>U bent uitgenodigd voor team :app_name status pagina, om u in te schrijven klik op de volgende link.</p><p><a href=":link">:link</a></p><p>Bedankt, :app_name</p>',
|
||||
'text' => "U bent uitgenodigd voor team :app_name status pagina, om u in te schrijven klik op de volgende link.\n:link\nBedankt, :app_name",
|
||||
'html' => '<p>U bent uitgenodigd voor team :app_name status pagina, om u in te schrijven klik op de volgende link.</p><p><a href=":link">:link</a></p><p>Bedankt, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Site-id van Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Website tijdzone',
|
||||
'site-locale' => 'Taal van de site',
|
||||
'date-format' => 'Datum formaat',
|
||||
'incident-date-format' => 'Incident tijdsaanduiding',
|
||||
'site-timezone' => 'Website tijdzone',
|
||||
'site-locale' => 'Taal van de site',
|
||||
'date-format' => 'Datum formaat',
|
||||
'incident-date-format' => 'Incident tijdsaanduiding',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Toegestane domeinen',
|
||||
|
||||
@@ -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>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Zostałeś zaproszony do strony statusowej zespołu :app_name. Aby się zapisać, kliknij na link umieszczony dalej.\n:link\nDziękujemy, :app_name",
|
||||
'html' => '<p>Zostałeś zaproszony do strony statusowej zespołu :app_name. Aby się zapisać, kliknij na link umieszczony dalej.</p><p><a href=":link">:link</a></p><p>Dziękujemy, :app_name</p>',
|
||||
'text' => "Zostałeś zaproszony do strony statusowej zespołu :app_name. Aby się zapisać, kliknij na link umieszczony dalej.\n:link\nDziękujemy, :app_name",
|
||||
'html' => '<p>Zostałeś zaproszony do strony statusowej zespołu :app_name. Aby się zapisać, kliknij na link umieszczony dalej.</p><p><a href=":link">:link</a></p><p>Dziękujemy, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Piwik\'s Seiten-ID',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Zeitzone ihrer Seite',
|
||||
'site-locale' => 'Sprache ihrer Seite',
|
||||
'date-format' => 'Datumsformat',
|
||||
'incident-date-format' => 'Vorfall Zeitstempel-Format',
|
||||
'site-timezone' => 'Zeitzone ihrer Seite',
|
||||
'site-locale' => 'Sprache ihrer Seite',
|
||||
'date-format' => 'Datumsformat',
|
||||
'incident-date-format' => 'Vorfall Zeitstempel-Format',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Erlaubte Domains',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Você foi convidado para a página de status da equipe :app_name, para se inscrever siga o próximo link.\n:link\nObrigado,: app_name",
|
||||
'html' => '<p>Você foi convidado para a página de status da equipe :app_name, para se inscrever siga o seguinte link.</p> <p><a href=":link">:link</a></p> <p>Obrigado, :app_name</p>',
|
||||
'text' => "Você foi convidado para a página de status da equipe :app_name, para se inscrever siga o próximo link.\n:link\nObrigado,: app_name",
|
||||
'html' => '<p>Você foi convidado para a página de status da equipe :app_name, para se inscrever siga o seguinte link.</p> <p><a href=":link">:link</a></p> <p>Obrigado, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'Id do site no Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Fuso horário do site',
|
||||
'site-locale' => 'Idioma do site',
|
||||
'date-format' => 'Formato da data',
|
||||
'incident-date-format' => 'Formato de Hora do Incidente',
|
||||
'site-timezone' => 'Fuso horário do site',
|
||||
'site-locale' => 'Idioma do site',
|
||||
'date-format' => 'Formato da data',
|
||||
'incident-date-format' => 'Formato de Hora do Incidente',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Domínios permitidos',
|
||||
|
||||
@@ -103,8 +103,8 @@ return [
|
||||
'users' => [
|
||||
'email' => [
|
||||
'invite' => [
|
||||
'text' => "Você foi convidado para a equipa :app_name página de status, para se inscrever siga o próximo link.\n:link\nObrigado, :app_name",
|
||||
'html' => '<p>Foi convidado para a equipa :app_name página de status, para se inscrever siga o seguinte link.</p> <p><a href=":link">:link</a></p> <p>Obrigado, :app_name</p>',
|
||||
'text' => "Você foi convidado para a equipa :app_name página de status, para se inscrever siga o próximo link.\n:link\nObrigado, :app_name",
|
||||
'html' => '<p>Foi convidado para a equipa :app_name página de status, para se inscrever siga o seguinte link.</p> <p><a href=":link">:link</a></p> <p>Obrigado, :app_name</p>',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@@ -118,10 +118,10 @@ return [
|
||||
'analytics_piwik_siteid' => 'ID do site Piwik',
|
||||
],
|
||||
'localization' => [
|
||||
'site-timezone' => 'Fuso horário do site',
|
||||
'site-locale' => 'Idioma do site',
|
||||
'date-format' => 'Formato da Data',
|
||||
'incident-date-format' => 'Formato da Hora do Incidente',
|
||||
'site-timezone' => 'Fuso horário do site',
|
||||
'site-locale' => 'Idioma do site',
|
||||
'date-format' => 'Formato da Data',
|
||||
'incident-date-format' => 'Formato da Hora do Incidente',
|
||||
],
|
||||
'security' => [
|
||||
'allowed-domains' => 'Domínios permitidos',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user