Merged 2.3

This commit is contained in:
James Brooks
2016-07-11 09:56:11 +01:00
222 changed files with 969 additions and 851 deletions

View File

@@ -1,16 +1,8 @@
Before submitting your issue, please make sure that you've checked all of the checkboxes below.
Before submitting your issue, please make sure that you've checked the checkboxes below.
- [ ] You're running the [latest release](https://github.com/CachetHQ/Cachet/releases/latest) version of Cachet.
- [ ] Ensure that you're running at least PHP 5.5.9, you can check this by running `php -v`
- [ ] You've ran `rm -rf bootstrap/cache/*` from the root of your Cachet installation.
To help us better understand your issue, please answer the following — cheers!
### Your setup
- *What version of Cachet?*
- *What database driver? MySQL? Postgres? SQLite?*
- *What version of PHP?*
- [ ] I am running the [latest release](https://github.com/CachetHQ/Cachet/releases/latest) version of Cachet.
- [ ] I am running at least PHP 5.5.9. *You can check this by running `php -v`.*
- [ ] I have ran `rm -rf bootstrap/cache/*`.
### Expected behaviour
@@ -23,3 +15,6 @@ To help us better understand your issue, please answer the following — cheers!
### Steps to reproduce
*If your issue requires any specific steps to reproduce, please outline them here.*
1. First step
2. Second step

View File

@@ -42,7 +42,7 @@ final class AddMetricPointCommand
* @var string[]
*/
public $rules = [
'value' => 'int',
'value' => 'numeric',
'created_at' => 'string',
];

View File

@@ -16,6 +16,7 @@ use CachetHQ\Cachet\Settings\Cache;
use CachetHQ\Cachet\Settings\Repository;
use Exception;
use Illuminate\Support\ServiceProvider;
use Jenssegers\Date\Date;
/**
* This is the config service provider class.
@@ -64,6 +65,7 @@ class ConfigServiceProvider extends ServiceProvider
if ($appLocale = $this->app->config->get('setting.app_locale')) {
$this->app->config->set('app.locale', $appLocale);
$this->app->translator->setLocale($appLocale);
Date::setLocale($appLocale);
}
if ($appTimezone = $this->app->config->get('setting.app_timezone')) {

View File

@@ -16,8 +16,15 @@ use CachetHQ\Cachet\Repositories\Metric\MetricRepository;
use CachetHQ\Cachet\Repositories\Metric\MySqlRepository as MetricMySqlRepository;
use CachetHQ\Cachet\Repositories\Metric\PgSqlRepository as MetricPgSqlRepository;
use CachetHQ\Cachet\Repositories\Metric\SqliteRepository as MetricSqliteRepository;
use Illuminate\Contracts\Config\Repository as ConfigRepository;
use Illuminate\Contracts\Container\Container;
use Illuminate\Support\ServiceProvider;
/**
* This is the repository service provider.
*
* @author James Brooks <james@alt-three.com>
*/
class RepositoryServiceProvider extends ServiceProvider
{
/**
@@ -37,15 +44,16 @@ class RepositoryServiceProvider extends ServiceProvider
*/
protected function registerMetricRepository()
{
$this->app->singleton(MetricRepository::class, function ($app) {
$dbDriver = $app['config']->get('database.default');
$this->app->singleton(MetricRepository::class, function (Container $app) {
$config = $app->make(ConfigRepository::class);
$driver = $config->get('database.default');
if ($dbDriver == 'mysql') {
$repository = new MetricMySqlRepository();
} elseif ($dbDriver == 'pgsql') {
$repository = new MetricPgSqlRepository();
} elseif ($dbDriver == 'sqlite') {
$repository = new MetricSqliteRepository();
if ($driver == 'mysql') {
$repository = new MetricMySqlRepository($config);
} elseif ($driver == 'pgsql') {
$repository = new MetricPgSqlRepository($config);
} elseif ($driver == 'sqlite') {
$repository = new MetricSqliteRepository($config);
}
$dates = $app->make(DateFactory::class);

View File

@@ -11,32 +11,46 @@
namespace CachetHQ\Cachet\Http\Controllers\Dashboard;
use CachetHQ\Cachet\Bus\Commands\Component\UpdateComponentCommand;
use CachetHQ\Cachet\Bus\Commands\ComponentGroup\UpdateComponentGroupCommand;
use CachetHQ\Cachet\Http\Controllers\Api\AbstractApiController;
use CachetHQ\Cachet\Models\Component;
use CachetHQ\Cachet\Models\ComponentGroup;
use CachetHQ\Cachet\Models\IncidentTemplate;
use Exception;
use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Routing\Controller;
use Illuminate\Database\QueryException;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
class ApiController extends Controller
class ApiController extends AbstractApiController
{
/**
* Updates a component with the entered info.
*
* @param \CachetHQ\Cachet\Models\Component $component
*
* @throws \Exception
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
*
* @return \CachetHQ\Cachet\Models\Component
*/
public function postUpdateComponent(Component $component)
{
if (!$component->update(Binput::except(['_token']))) {
throw new Exception(trans('dashboard.components.edit.failure'));
try {
dispatch(new UpdateComponentCommand(
$component,
null,
null,
Binput::get('status'),
null,
null,
null,
null
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
return $component;
return $this->item($component);
}
/**
@@ -49,11 +63,23 @@ class ApiController extends Controller
$componentData = Binput::get('ids');
foreach ($componentData as $order => $componentId) {
// Ordering should be 1-based, data comes in 0-based
Component::find($componentId)->update(['order' => $order + 1]);
try {
dispatch(new UpdateComponentCommand(
Component::find($componentId),
null,
null,
null,
null,
$order + 1,
null,
null
));
} catch (QueryException $e) {
throw new BadRequestHttpException();
}
}
return $componentData;
return $this->collection(Component::query()->orderBy('order')->get());
}
/**
@@ -66,10 +92,15 @@ class ApiController extends Controller
$groupData = Binput::get('ids');
foreach ($groupData as $order => $groupId) {
ComponentGroup::find($groupId)->update(['order' => $order + 1]);
dispatch(new UpdateComponentGroupCommand(
ComponentGroup::find($groupId),
null,
$order + 1,
null
));
}
return $groupData;
return $this->collection(ComponentGroup::query()->orderBy('order')->get());
}
/**

View File

@@ -18,6 +18,7 @@ use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\Subscriber;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\View;
use Jenssegers\Date\Date;
@@ -58,6 +59,16 @@ class DashboardController extends Controller
$this->dateTimeZone = Config::get('cachet.timezone');
}
/**
* Redirect /admin to /dashboard.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function redirectAdmin()
{
return Redirect::route('dashboard.index');
}
/**
* Shows the dashboard view.
*

View File

@@ -47,7 +47,7 @@ class SignupController extends Controller
return View::make('signup')
->withCode($invite->code)
->withUsername(Binput::old('username'))
->withEmail(Binput::old('emai', $invite->email));
->withEmail(Binput::old('email', $invite->email));
}
/**

View File

@@ -29,209 +29,213 @@ class DashboardRoutes
*/
public function map(Registrar $router)
{
$router->group(['middleware' => ['web', 'auth'], 'prefix' => 'dashboard', 'namespace' => 'Dashboard', 'as' => 'dashboard.'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'DashboardController@showDashboard',
]);
$router->group(['middleware' => ['web', 'auth'], 'namespace' => 'Dashboard'], function (Registrar $router) {
$router->get('admin', 'DashboardController@redirectAdmin');
$router->group(['as' => 'components.', 'prefix' => 'components'], function (Registrar $router) {
$router->group(['prefix' => 'dashboard', 'as' => 'dashboard.'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'ComponentController@showComponents',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'ComponentController@showAddComponent',
]);
$router->post('add', 'ComponentController@createComponentAction');
$router->get('groups', [
'as' => 'groups',
'uses' => 'ComponentController@showComponentGroups',
]);
$router->get('groups/add', [
'as' => 'groups.add',
'uses' => 'ComponentController@showAddComponentGroup',
]);
$router->get('groups/edit/{component_group}', [
'as' => 'groups.edit',
'uses' => 'ComponentController@showEditComponentGroup',
]);
$router->post('groups/edit/{component_group}', 'ComponentController@updateComponentGroupAction');
$router->delete('groups/{component_group}/delete', 'ComponentController@deleteComponentGroupAction');
$router->post('groups/add', 'ComponentController@postAddComponentGroup');
$router->get('{component}/edit', [
'as' => 'edit',
'uses' => 'ComponentController@showEditComponent',
]);
$router->delete('{component}/delete', 'ComponentController@deleteComponentAction');
$router->post('{component}/edit', 'ComponentController@updateComponentAction');
});
$router->group(['as' => 'incidents.', 'prefix' => 'incidents'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'IncidentController@showIncidents',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'IncidentController@showAddIncident',
]);
$router->post('add', 'IncidentController@createIncidentAction');
$router->delete('{incident}/delete', [
'as' => 'delete',
'uses' => 'IncidentController@deleteIncidentAction',
]);
$router->get('{incident}/edit', [
'as' => 'edit',
'uses' => 'IncidentController@showEditIncidentAction',
]);
$router->post('{incident}/edit', 'IncidentController@editIncidentAction');
});
$router->group(['as' => 'schedule.', 'prefix' => 'schedule'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'ScheduleController@showIndex',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'ScheduleController@showAddSchedule',
]);
$router->post('add', 'ScheduleController@addScheduleAction');
$router->get('{incident}/edit', [
'as' => 'edit',
'uses' => 'ScheduleController@showEditSchedule',
]);
$router->post('{incident}/edit', 'ScheduleController@editScheduleAction');
$router->delete('{incident}/delete', [
'as' => 'delete',
'uses' => 'ScheduleController@deleteScheduleAction',
]);
});
$router->group(['as' => 'templates.', 'prefix' => 'templates'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'IncidentController@showTemplates',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'IncidentController@showAddIncidentTemplate',
]);
$router->post('add', 'IncidentController@createIncidentTemplateAction');
$router->get('{incident_template}/edit', [
'as' => 'edit',
'uses' => 'IncidentController@showEditTemplateAction',
]);
$router->post('{incident_template}/edit', 'IncidentController@editTemplateAction');
$router->delete('{incident_template}/delete', 'IncidentController@deleteTemplateAction');
});
$router->group(['as' => 'subscribers.', 'prefix' => 'subscribers'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'SubscriberController@showSubscribers',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'SubscriberController@showAddSubscriber',
]);
$router->post('add', 'SubscriberController@createSubscriberAction');
$router->delete('{subscriber}/delete', 'SubscriberController@deleteSubscriberAction');
});
$router->group(['as' => 'metrics.', 'prefix' => 'metrics'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'MetricController@showMetrics',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'MetricController@showAddMetric',
]);
$router->post('add', 'MetricController@createMetricAction');
$router->delete('{metric}/delete', 'MetricController@deleteMetricAction');
$router->get('{metric}/edit', [
'as' => 'edit',
'uses' => 'MetricController@showEditMetricAction',
]);
$router->post('{metric}/edit', 'MetricController@editMetricAction');
});
$router->group(['as' => 'team.', 'prefix' => 'team'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'TeamController@showTeamView',
'uses' => 'DashboardController@showDashboard',
]);
$router->group(['middleware' => 'admin'], function (Registrar $router) {
$router->group(['as' => 'components.', 'prefix' => 'components'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'ComponentController@showComponents',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'TeamController@showAddTeamMemberView',
'uses' => 'ComponentController@showAddComponent',
]);
$router->get('invite', [
'as' => 'invite',
'uses' => 'TeamController@showInviteTeamMemberView',
$router->post('add', 'ComponentController@createComponentAction');
$router->get('groups', [
'as' => 'groups',
'uses' => 'ComponentController@showComponentGroups',
]);
$router->get('{user}', ['as' => 'edit', 'uses' => 'TeamController@showTeamMemberView']);
$router->post('add', 'TeamController@postAddUser');
$router->post('invite', 'TeamController@postInviteUser');
$router->post('{user}', 'TeamController@postUpdateUser');
$router->delete('{user}/delete', 'TeamController@deleteUser');
$router->get('groups/add', [
'as' => 'groups.add',
'uses' => 'ComponentController@showAddComponentGroup',
]);
$router->get('groups/edit/{component_group}', [
'as' => 'groups.edit',
'uses' => 'ComponentController@showEditComponentGroup',
]);
$router->post('groups/edit/{component_group}', 'ComponentController@updateComponentGroupAction');
$router->delete('groups/{component_group}/delete', 'ComponentController@deleteComponentGroupAction');
$router->post('groups/add', 'ComponentController@postAddComponentGroup');
$router->get('{component}/edit', [
'as' => 'edit',
'uses' => 'ComponentController@showEditComponent',
]);
$router->delete('{component}/delete', 'ComponentController@deleteComponentAction');
$router->post('{component}/edit', 'ComponentController@updateComponentAction');
});
});
$router->group(['as' => 'settings.', 'prefix' => 'settings'], function (Registrar $router) {
$router->get('setup', [
'as' => 'setup',
'uses' => 'SettingsController@showSetupView',
]);
$router->get('analytics', [
'as' => 'analytics',
'uses' => 'SettingsController@showAnalyticsView',
]);
$router->get('localization', [
'as' => 'localization',
'uses' => 'SettingsController@showLocalizationView',
]);
$router->get('security', [
'as' => 'security',
'uses' => 'SettingsController@showSecurityView',
]);
$router->get('theme', [
'as' => 'theme',
'uses' => 'SettingsController@showThemeView',
]);
$router->get('stylesheet', [
'as' => 'stylesheet',
'uses' => 'SettingsController@showStylesheetView',
]);
$router->get('customization', [
'as' => 'customization',
'uses' => 'SettingsController@showCustomizationView',
]);
$router->get('credits', [
'as' => 'credits',
'uses' => 'SettingsController@showCreditsView',
]);
$router->post('/', 'SettingsController@postSettings');
});
$router->group(['as' => 'incidents.', 'prefix' => 'incidents'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'IncidentController@showIncidents',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'IncidentController@showAddIncident',
]);
$router->post('add', 'IncidentController@createIncidentAction');
$router->delete('{incident}/delete', [
'as' => 'delete',
'uses' => 'IncidentController@deleteIncidentAction',
]);
$router->get('{incident}/edit', [
'as' => 'edit',
'uses' => 'IncidentController@showEditIncidentAction',
]);
$router->post('{incident}/edit', 'IncidentController@editIncidentAction');
});
$router->group(['prefix' => 'user'], function (Registrar $router) {
$router->get('/', [
'as' => 'user',
'uses' => 'UserController@showUser',
]);
$router->post('/', 'UserController@postUser');
$router->get('{user}/api/regen', 'UserController@regenerateApiKey');
});
$router->group(['as' => 'schedule.', 'prefix' => 'schedule'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'ScheduleController@showIndex',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'ScheduleController@showAddSchedule',
]);
$router->post('add', 'ScheduleController@addScheduleAction');
$router->get('{incident}/edit', [
'as' => 'edit',
'uses' => 'ScheduleController@showEditSchedule',
]);
$router->post('{incident}/edit', 'ScheduleController@editScheduleAction');
$router->delete('{incident}/delete', [
'as' => 'delete',
'uses' => 'ScheduleController@deleteScheduleAction',
]);
});
$router->group(['prefix' => 'api'], function (Registrar $router) {
$router->get('incidents/templates', 'ApiController@getIncidentTemplate');
$router->post('components/groups/order', 'ApiController@postUpdateComponentGroupOrder');
$router->post('components/order', 'ApiController@postUpdateComponentOrder');
$router->post('components/{component}', 'ApiController@postUpdateComponent');
$router->group(['as' => 'templates.', 'prefix' => 'templates'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'IncidentController@showTemplates',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'IncidentController@showAddIncidentTemplate',
]);
$router->post('add', 'IncidentController@createIncidentTemplateAction');
$router->get('{incident_template}/edit', [
'as' => 'edit',
'uses' => 'IncidentController@showEditTemplateAction',
]);
$router->post('{incident_template}/edit', 'IncidentController@editTemplateAction');
$router->delete('{incident_template}/delete', 'IncidentController@deleteTemplateAction');
});
$router->group(['as' => 'subscribers.', 'prefix' => 'subscribers'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'SubscriberController@showSubscribers',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'SubscriberController@showAddSubscriber',
]);
$router->post('add', 'SubscriberController@createSubscriberAction');
$router->delete('{subscriber}/delete', 'SubscriberController@deleteSubscriberAction');
});
$router->group(['as' => 'metrics.', 'prefix' => 'metrics'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'MetricController@showMetrics',
]);
$router->get('add', [
'as' => 'add',
'uses' => 'MetricController@showAddMetric',
]);
$router->post('add', 'MetricController@createMetricAction');
$router->delete('{metric}/delete', 'MetricController@deleteMetricAction');
$router->get('{metric}/edit', [
'as' => 'edit',
'uses' => 'MetricController@showEditMetricAction',
]);
$router->post('{metric}/edit', 'MetricController@editMetricAction');
});
$router->group(['as' => 'team.', 'prefix' => 'team'], function (Registrar $router) {
$router->get('/', [
'as' => 'index',
'uses' => 'TeamController@showTeamView',
]);
$router->group(['middleware' => 'admin'], function (Registrar $router) {
$router->get('add', [
'as' => 'add',
'uses' => 'TeamController@showAddTeamMemberView',
]);
$router->get('invite', [
'as' => 'invite',
'uses' => 'TeamController@showInviteTeamMemberView',
]);
$router->get('{user}', ['as' => 'edit', 'uses' => 'TeamController@showTeamMemberView']);
$router->post('add', 'TeamController@postAddUser');
$router->post('invite', 'TeamController@postInviteUser');
$router->post('{user}', 'TeamController@postUpdateUser');
$router->delete('{user}/delete', 'TeamController@deleteUser');
});
});
$router->group(['as' => 'settings.', 'prefix' => 'settings'], function (Registrar $router) {
$router->get('setup', [
'as' => 'setup',
'uses' => 'SettingsController@showSetupView',
]);
$router->get('analytics', [
'as' => 'analytics',
'uses' => 'SettingsController@showAnalyticsView',
]);
$router->get('localization', [
'as' => 'localization',
'uses' => 'SettingsController@showLocalizationView',
]);
$router->get('security', [
'as' => 'security',
'uses' => 'SettingsController@showSecurityView',
]);
$router->get('theme', [
'as' => 'theme',
'uses' => 'SettingsController@showThemeView',
]);
$router->get('stylesheet', [
'as' => 'stylesheet',
'uses' => 'SettingsController@showStylesheetView',
]);
$router->get('customization', [
'as' => 'customization',
'uses' => 'SettingsController@showCustomizationView',
]);
$router->get('credits', [
'as' => 'credits',
'uses' => 'SettingsController@showCreditsView',
]);
$router->post('/', 'SettingsController@postSettings');
});
$router->group(['prefix' => 'user'], function (Registrar $router) {
$router->get('/', [
'as' => 'user',
'uses' => 'UserController@showUser',
]);
$router->post('/', 'UserController@postUser');
$router->get('{user}/api/regen', 'UserController@regenerateApiKey');
});
$router->group(['prefix' => 'api'], function (Registrar $router) {
$router->get('incidents/templates', 'ApiController@getIncidentTemplate');
$router->post('components/groups/order', 'ApiController@postUpdateComponentGroupOrder');
$router->post('components/order', 'ApiController@postUpdateComponentOrder');
$router->post('components/{component}', 'ApiController@postUpdateComponent');
});
});
});
}

View File

@@ -0,0 +1,63 @@
<?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\Repositories\Metric;
use CachetHQ\Cachet\Models\Metric;
use Illuminate\Contracts\Config\Repository;
/**
* This is the abstract metric repository class.
*
* @author Jams Brooks <james@alt-three.com>
*/
abstract class AbstractMetricRepository
{
/**
* The illuminate config repository.
*
* @var \Illuminate\Contracts\Config\Repository
*/
protected $config;
/**
* The name of the metrics table.
*
* @var string
*/
protected $tableName;
/**
* Create a new abstract metric repository instance.
*
* @param \Illuminate\Contracts\Config\Repository $config
*
* @return void
*/
public function __construct(Repository $config)
{
$this->config = $config;
}
/**
* Get the metrics table name.
*
* @return string
*/
protected function getTableName()
{
$driver = $this->config->get('database.default');
$connection = $this->config->get('database.connections.'.$driver);
$prefix = $connection['prefix'];
return $prefix.'metrics';
}
}

View File

@@ -16,7 +16,12 @@ use DateInterval;
use Illuminate\Support\Facades\DB;
use Jenssegers\Date\Date;
class MySqlRepository implements MetricInterface
/**
* This is the mysql repository class.
*
* @author James Brooks <james@alt-three.com>
*/
class MySqlRepository extends AbstractMetricRepository implements MetricInterface
{
/**
* Returns metrics for the last hour.
@@ -40,7 +45,7 @@ class MySqlRepository implements MetricInterface
$value = 0;
$points = DB::select("SELECT {$queryType} FROM metrics m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H%i') = :timeInterval GROUP BY HOUR(mp.`created_at`), MINUTE(mp.`created_at`)", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H%i') = :timeInterval GROUP BY HOUR(mp.`created_at`), MINUTE(mp.`created_at`)", [
'metricId' => $metric->id,
'timeInterval' => $timeInterval,
]);
@@ -77,7 +82,7 @@ class MySqlRepository implements MetricInterface
$value = 0;
$points = DB::select("SELECT {$queryType} FROM metrics m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H') = :hourInterval GROUP BY HOUR(mp.`created_at`)", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND DATE_FORMAT(mp.`created_at`, '%Y%m%d%H') = :hourInterval GROUP BY HOUR(mp.`created_at`)", [
'metricId' => $metric->id,
'hourInterval' => $hourInterval,
]);
@@ -112,7 +117,7 @@ class MySqlRepository implements MetricInterface
$value = 0;
$points = DB::select("SELECT {$queryType} FROM metrics m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.`created_at` BETWEEN DATE_SUB(mp.`created_at`, INTERVAL 1 WEEK) AND DATE_ADD(NOW(), INTERVAL 1 DAY) AND DATE_FORMAT(mp.`created_at`, '%Y%m%d') = :timeInterval GROUP BY DATE_FORMAT(mp.`created_at`, '%Y%m%d')", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.`created_at` BETWEEN DATE_SUB(mp.`created_at`, INTERVAL 1 WEEK) AND DATE_ADD(NOW(), INTERVAL 1 DAY) AND DATE_FORMAT(mp.`created_at`, '%Y%m%d') = :timeInterval GROUP BY DATE_FORMAT(mp.`created_at`, '%Y%m%d')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('Ymd'),
]);

View File

@@ -16,7 +16,12 @@ use DateInterval;
use Illuminate\Support\Facades\DB;
use Jenssegers\Date\Date;
class PgSqlRepository implements MetricInterface
/**
* This is the pgsql repository class.
*
* @author James Brooks <james@alt-three.com>
*/
class PgSqlRepository extends AbstractMetricRepository implements MetricInterface
{
/**
* Returns metrics for the last hour.
@@ -41,7 +46,7 @@ class PgSqlRepository implements MetricInterface
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM metrics JOIN metric_points ON metric_points.metric_id = metrics.id WHERE metrics.id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24MI') = :timeInterval GROUP BY to_char(metric_points.created_at, 'HHMI')", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24MI') = :timeInterval GROUP BY to_char(metric_points.created_at, 'HHMI')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdHi'),
]);
@@ -79,7 +84,7 @@ class PgSqlRepository implements MetricInterface
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM metrics JOIN metric_points ON metric_points.metric_id = metrics.id WHERE metric_points.metric_id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24') = :timeInterval GROUP BY to_char(metric_points.created_at, 'H')", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE metric_points.metric_id = :metricId AND to_char(metric_points.created_at, 'YYYYMMDDHH24') = :timeInterval GROUP BY to_char(metric_points.created_at, 'H')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdH'),
]);
@@ -113,7 +118,7 @@ class PgSqlRepository implements MetricInterface
}
$value = 0;
$points = DB::select("SELECT {$queryType} FROM metrics m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.created_at BETWEEN (mp.created_at - interval '1 week') AND (now() + interval '1 day') AND to_char(mp.created_at, 'YYYYMMDD') = :timeInterval GROUP BY to_char(mp.created_at, 'YYYYMMDD')", [
$points = DB::select("SELECT {$queryType} FROM {$this->getTableName()} m INNER JOIN metric_points mp ON m.id = mp.metric_id WHERE m.id = :metricId AND mp.created_at BETWEEN (mp.created_at - interval '1 week') AND (now() + interval '1 day') AND to_char(mp.created_at, 'YYYYMMDD') = :timeInterval GROUP BY to_char(mp.created_at, 'YYYYMMDD')", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('Ymd'),
]);

View File

@@ -16,7 +16,7 @@ use DateInterval;
use Illuminate\Support\Facades\DB;
use Jenssegers\Date\Date;
class SqliteRepository implements MetricInterface
class SqliteRepository extends AbstractMetricRepository implements MetricInterface
{
/**
* Returns metrics for the last hour.
@@ -41,7 +41,7 @@ class SqliteRepository implements MetricInterface
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM metrics JOIN metric_points ON metric_points.metric_id = metrics.id WHERE metrics.id = :metricId AND strftime('%Y%m%d%H%M', metric_points.created_at) = :timeInterval GROUP BY strftime('%H%M', metric_points.created_at)", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H%M', metric_points.created_at) = :timeInterval GROUP BY strftime('%H%M', metric_points.created_at)", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdHi'),
]);
@@ -79,7 +79,7 @@ class SqliteRepository implements MetricInterface
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM metrics JOIN metric_points ON metric_points.metric_id = metrics.id WHERE metrics.id = :metricId AND strftime('%Y%m%d%H', metric_points.created_at) = :timeInterval GROUP BY strftime('%H', metric_points.created_at)", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND strftime('%Y%m%d%H', metric_points.created_at) = :timeInterval GROUP BY strftime('%H', metric_points.created_at)", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('YmdH'),
]);
@@ -116,7 +116,7 @@ class SqliteRepository implements MetricInterface
}
$value = 0;
$query = DB::select("select {$queryType} as value FROM metrics JOIN metric_points ON metric_points.metric_id = metrics.id WHERE metrics.id = :metricId AND metric_points.created_at > date('now', '-7 day') AND strftime('%Y%m%d', metric_points.created_at) = :timeInterval GROUP BY strftime('%Y%m%d', metric_points.created_at)", [
$query = DB::select("select {$queryType} as value FROM {$this->getTableName()} m JOIN metric_points ON metric_points.metric_id = m.id WHERE m.id = :metricId AND metric_points.created_at > date('now', '-7 day') AND strftime('%Y%m%d', metric_points.created_at) = :timeInterval GROUP BY strftime('%Y%m%d', metric_points.created_at)", [
'metricId' => $metric->id,
'timeInterval' => $dateTime->format('Ymd'),
]);

172
composer.lock generated
View File

@@ -325,22 +325,22 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.18.20",
"version": "3.18.25",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "e5a901dd3a42d0c46a90ee37a174938cd0ce55bf"
"reference": "37a8ce927a69de3d821c21b64674a2b3b9d1d247"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e5a901dd3a42d0c46a90ee37a174938cd0ce55bf",
"reference": "e5a901dd3a42d0c46a90ee37a174938cd0ce55bf",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/37a8ce927a69de3d821c21b64674a2b3b9d1d247",
"reference": "37a8ce927a69de3d821c21b64674a2b3b9d1d247",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "~5.3|~6.0.1|~6.1",
"guzzlehttp/promises": "~1.0",
"guzzlehttp/psr7": "~1.0",
"guzzlehttp/psr7": "~1.3.1",
"mtdowling/jmespath.php": "~2.2",
"php": ">=5.5"
},
@@ -401,7 +401,7 @@
"s3",
"sdk"
],
"time": "2016-06-23 23:17:52"
"time": "2016-07-05 19:25:06"
},
{
"name": "backup-manager/backup-manager",
@@ -569,20 +569,20 @@
},
{
"name": "barryvdh/laravel-cors",
"version": "v0.8.0",
"version": "v0.8.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-cors.git",
"reference": "39975d7505757488f982ca132bcd02c704792fd8"
"reference": "1998c8c7295d167cb744bbc45fbefad9b86b836c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/39975d7505757488f982ca132bcd02c704792fd8",
"reference": "39975d7505757488f982ca132bcd02c704792fd8",
"url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/1998c8c7295d167cb744bbc45fbefad9b86b836c",
"reference": "1998c8c7295d167cb744bbc45fbefad9b86b836c",
"shasum": ""
},
"require": {
"illuminate/support": "5.1.x|5.2.x",
"illuminate/support": "5.1.x|5.2.x|5.3.x",
"php": ">=5.5.9",
"symfony/http-foundation": "~2.7|~3.0",
"symfony/http-kernel": "~2.7|~3.0"
@@ -618,7 +618,7 @@
"crossdomain",
"laravel"
],
"time": "2016-02-11 18:38:09"
"time": "2016-06-22 06:36:34"
},
{
"name": "christian-riesen/base32",
@@ -2362,16 +2362,16 @@
},
{
"name": "monolog/monolog",
"version": "1.19.0",
"version": "1.20.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf"
"reference": "55841909e2bcde01b5318c35f2b74f8ecc86e037"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/5f56ed5212dc509c8dc8caeba2715732abb32dbf",
"reference": "5f56ed5212dc509c8dc8caeba2715732abb32dbf",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/55841909e2bcde01b5318c35f2b74f8ecc86e037",
"reference": "55841909e2bcde01b5318c35f2b74f8ecc86e037",
"shasum": ""
},
"require": {
@@ -2390,8 +2390,8 @@
"php-console/php-console": "^3.1.3",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"raven/raven": "^0.13",
"ruflin/elastica": ">=0.90 <3.0",
"sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "~5.3"
},
"suggest": {
@@ -2403,9 +2403,9 @@
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"php-console/php-console": "Allow sending log messages to Google Chrome",
"raven/raven": "Allow sending log messages to a Sentry server",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
"sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
@@ -2436,7 +2436,7 @@
"logging",
"psr-3"
],
"time": "2016-04-12 18:29:35"
"time": "2016-07-02 14:02:10"
},
{
"name": "mtdowling/cron-expression",
@@ -3117,16 +3117,16 @@
},
{
"name": "symfony/console",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "382fc9ed852edabd6133e34f8549d7a7d99db115"
"reference": "a7abb7153f6d1da47f87ec50274844e246b09d9f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/382fc9ed852edabd6133e34f8549d7a7d99db115",
"reference": "382fc9ed852edabd6133e34f8549d7a7d99db115",
"url": "https://api.github.com/repos/symfony/console/zipball/a7abb7153f6d1da47f87ec50274844e246b09d9f",
"reference": "a7abb7153f6d1da47f87ec50274844e246b09d9f",
"shasum": ""
},
"require": {
@@ -3173,20 +3173,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 15:08:35"
"time": "2016-06-29 07:02:21"
},
{
"name": "symfony/css-selector",
"version": "v3.1.1",
"version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "c526d7b3cb4fe1673c6a34e13be2ff63f519df99"
"reference": "2851e1932d77ce727776154d659b232d061e816a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/c526d7b3cb4fe1673c6a34e13be2ff63f519df99",
"reference": "c526d7b3cb4fe1673c6a34e13be2ff63f519df99",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/2851e1932d77ce727776154d659b232d061e816a",
"reference": "2851e1932d77ce727776154d659b232d061e816a",
"shasum": ""
},
"require": {
@@ -3226,20 +3226,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 11:42:41"
"time": "2016-06-29 05:41:56"
},
{
"name": "symfony/debug",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "e67e1552dd7313df1cf6535cb606751899e0e727"
"reference": "c54bc3539c3b87e86799533801e8ae0e971d78c2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/e67e1552dd7313df1cf6535cb606751899e0e727",
"reference": "e67e1552dd7313df1cf6535cb606751899e0e727",
"url": "https://api.github.com/repos/symfony/debug/zipball/c54bc3539c3b87e86799533801e8ae0e971d78c2",
"reference": "c54bc3539c3b87e86799533801e8ae0e971d78c2",
"shasum": ""
},
"require": {
@@ -3283,20 +3283,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 15:08:35"
"time": "2016-06-29 05:40:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v3.1.1",
"version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "f5b7563f67779c6d3d5370e23448e707c858df3e"
"reference": "7f9839ede2070f53e7e2f0849b9bd14748c434c5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f5b7563f67779c6d3d5370e23448e707c858df3e",
"reference": "f5b7563f67779c6d3d5370e23448e707c858df3e",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7f9839ede2070f53e7e2f0849b9bd14748c434c5",
"reference": "7f9839ede2070f53e7e2f0849b9bd14748c434c5",
"shasum": ""
},
"require": {
@@ -3343,20 +3343,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 11:42:41"
"time": "2016-06-29 05:41:56"
},
{
"name": "symfony/finder",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "39e5f3d533d07b5416b9d7aad53a27f939d4f811"
"reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/39e5f3d533d07b5416b9d7aad53a27f939d4f811",
"reference": "39e5f3d533d07b5416b9d7aad53a27f939d4f811",
"url": "https://api.github.com/repos/symfony/finder/zipball/3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9",
"reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9",
"shasum": ""
},
"require": {
@@ -3392,20 +3392,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2016-05-13 18:03:36"
"time": "2016-06-29 05:40:00"
},
{
"name": "symfony/http-foundation",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "d268a643884f85e91d6ba11ca68de96833f3f6e5"
"reference": "1341139f906d295baa4f4abd55293d07e25a065a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/d268a643884f85e91d6ba11ca68de96833f3f6e5",
"reference": "d268a643884f85e91d6ba11ca68de96833f3f6e5",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/1341139f906d295baa4f4abd55293d07e25a065a",
"reference": "1341139f906d295baa4f4abd55293d07e25a065a",
"shasum": ""
},
"require": {
@@ -3445,20 +3445,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 11:33:26"
"time": "2016-06-29 07:02:21"
},
{
"name": "symfony/http-kernel",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "97cc1c15e3406e7a2adf14ad6b0e41a04d4a6fc4"
"reference": "177b63b2d50b63fa6d82ea41359ed9928cc7a1fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/97cc1c15e3406e7a2adf14ad6b0e41a04d4a6fc4",
"reference": "97cc1c15e3406e7a2adf14ad6b0e41a04d4a6fc4",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/177b63b2d50b63fa6d82ea41359ed9928cc7a1fb",
"reference": "177b63b2d50b63fa6d82ea41359ed9928cc7a1fb",
"shasum": ""
},
"require": {
@@ -3466,7 +3466,7 @@
"psr/log": "~1.0",
"symfony/debug": "~2.8|~3.0",
"symfony/event-dispatcher": "~2.8|~3.0",
"symfony/http-foundation": "~2.8|~3.0"
"symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2"
},
"conflict": {
"symfony/config": "<2.8"
@@ -3527,7 +3527,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 16:52:35"
"time": "2016-06-30 16:30:17"
},
{
"name": "symfony/polyfill-mbstring",
@@ -3698,16 +3698,16 @@
},
{
"name": "symfony/process",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "bf6e2d1fa8b93fdd7cca6b684c0ea213cf0255dd"
"reference": "d7cde1f9d94d87060204f863779389b61c382eeb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/bf6e2d1fa8b93fdd7cca6b684c0ea213cf0255dd",
"reference": "bf6e2d1fa8b93fdd7cca6b684c0ea213cf0255dd",
"url": "https://api.github.com/repos/symfony/process/zipball/d7cde1f9d94d87060204f863779389b61c382eeb",
"reference": "d7cde1f9d94d87060204f863779389b61c382eeb",
"shasum": ""
},
"require": {
@@ -3743,20 +3743,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 11:33:26"
"time": "2016-06-29 05:40:00"
},
{
"name": "symfony/routing",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "c780454838a1131adc756d737a4b4cc1d18f8c64"
"reference": "9038984bd9c05ab07280121e9e10f61a7231457b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/c780454838a1131adc756d737a4b4cc1d18f8c64",
"reference": "c780454838a1131adc756d737a4b4cc1d18f8c64",
"url": "https://api.github.com/repos/symfony/routing/zipball/9038984bd9c05ab07280121e9e10f61a7231457b",
"reference": "9038984bd9c05ab07280121e9e10f61a7231457b",
"shasum": ""
},
"require": {
@@ -3818,20 +3818,20 @@
"uri",
"url"
],
"time": "2016-05-30 06:58:27"
"time": "2016-06-29 05:40:00"
},
{
"name": "symfony/translation",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "2b0aacaa613c0ec1ad8046f972d8abdcb19c1db7"
"reference": "6bf844e1ee3c820c012386c10427a5c67bbefec8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/2b0aacaa613c0ec1ad8046f972d8abdcb19c1db7",
"reference": "2b0aacaa613c0ec1ad8046f972d8abdcb19c1db7",
"url": "https://api.github.com/repos/symfony/translation/zipball/6bf844e1ee3c820c012386c10427a5c67bbefec8",
"reference": "6bf844e1ee3c820c012386c10427a5c67bbefec8",
"shasum": ""
},
"require": {
@@ -3882,20 +3882,20 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2016-06-06 11:33:26"
"time": "2016-06-29 05:40:00"
},
{
"name": "symfony/var-dumper",
"version": "v3.0.7",
"version": "v3.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "d8bb851da153d97abe7c2b71a65dee19f324bcf7"
"reference": "2f046e9a9d571f22cc8b26783564876713b06579"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/d8bb851da153d97abe7c2b71a65dee19f324bcf7",
"reference": "d8bb851da153d97abe7c2b71a65dee19f324bcf7",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/2f046e9a9d571f22cc8b26783564876713b06579",
"reference": "2f046e9a9d571f22cc8b26783564876713b06579",
"shasum": ""
},
"require": {
@@ -3945,7 +3945,7 @@
"debug",
"dump"
],
"time": "2016-05-24 10:03:10"
"time": "2016-06-29 05:40:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -5453,16 +5453,16 @@
},
{
"name": "symfony/dom-crawler",
"version": "v3.1.1",
"version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "12aa63fd41b060d2bee9a34623d29eda70bc8fe3"
"reference": "99ec4a23330fcd0c8667095f3ef7aa204ffd9dc0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/12aa63fd41b060d2bee9a34623d29eda70bc8fe3",
"reference": "12aa63fd41b060d2bee9a34623d29eda70bc8fe3",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/99ec4a23330fcd0c8667095f3ef7aa204ffd9dc0",
"reference": "99ec4a23330fcd0c8667095f3ef7aa204ffd9dc0",
"shasum": ""
},
"require": {
@@ -5505,20 +5505,20 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
"time": "2016-05-13 15:49:09"
"time": "2016-06-29 05:41:56"
},
{
"name": "symfony/yaml",
"version": "v3.1.1",
"version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623"
"reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c5a7e7fc273c758b92b85dcb9c46149ccda89623",
"reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623",
"url": "https://api.github.com/repos/symfony/yaml/zipball/2884c26ce4c1d61aebf423a8b912950fe7c764de",
"reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de",
"shasum": ""
},
"require": {
@@ -5554,7 +5554,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"time": "2016-06-14 11:18:07"
"time": "2016-06-29 05:41:56"
},
{
"name": "webmozart/assert",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

21
public/build/dist/js/all-41ed801435.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
{
"dist/css/all.css": "dist/css/all-20deff324c.css",
"dist/js/all.js": "dist/js/all-0bf8973998.js"
"dist/css/all.css": "dist/css/all-81fdbf996d.css",
"dist/js/all.js": "dist/js/all-41ed801435.js"
}

0
resources/lang/af/cachet.php Executable file → Normal file
View File

0
resources/lang/af/dashboard.php Executable file → Normal file
View File

0
resources/lang/af/forms.php Executable file → Normal file
View File

0
resources/lang/af/pagination.php Executable file → Normal file
View File

0
resources/lang/af/setup.php Executable file → Normal file
View File

0
resources/lang/af/validation.php Executable file → Normal file
View File

0
resources/lang/ar/cachet.php Executable file → Normal file
View File

0
resources/lang/ar/dashboard.php Executable file → Normal file
View File

0
resources/lang/ar/forms.php Executable file → Normal file
View File

0
resources/lang/ar/pagination.php Executable file → Normal file
View File

0
resources/lang/ar/setup.php Executable file → Normal file
View File

0
resources/lang/ar/validation.php Executable file → Normal file
View File

0
resources/lang/ca/cachet.php Executable file → Normal file
View File

0
resources/lang/ca/dashboard.php Executable file → Normal file
View File

0
resources/lang/ca/forms.php Executable file → Normal file
View File

0
resources/lang/ca/pagination.php Executable file → Normal file
View File

0
resources/lang/ca/setup.php Executable file → Normal file
View File

0
resources/lang/ca/validation.php Executable file → Normal file
View File

0
resources/lang/cs/cachet.php Executable file → Normal file
View File

0
resources/lang/cs/dashboard.php Executable file → Normal file
View File

0
resources/lang/cs/forms.php Executable file → Normal file
View File

0
resources/lang/cs/pagination.php Executable file → Normal file
View File

0
resources/lang/cs/setup.php Executable file → Normal file
View File

0
resources/lang/cs/validation.php Executable file → Normal file
View File

0
resources/lang/da/cachet.php Executable file → Normal file
View File

0
resources/lang/da/dashboard.php Executable file → Normal file
View File

0
resources/lang/da/forms.php Executable file → Normal file
View File

0
resources/lang/da/pagination.php Executable file → Normal file
View File

0
resources/lang/da/setup.php Executable file → Normal file
View File

0
resources/lang/da/validation.php Executable file → Normal file
View File

12
resources/lang/de/cachet.php Executable file → Normal file
View File

@@ -75,21 +75,21 @@ return [
'subscribe' => 'Aktualisierungen per E-Mail abonnieren.',
'subscribed' => 'Sie haben E-Mail-Benachrichtigungen abonniert, überprüfen Sie bitte Ihre E-Mail, um Ihr Abonnement zu bestätigen.',
'verified' => 'Ihre E-Mail-Abonnement ist bestätigt worden. Danke!',
'manage' => 'Manage your subscription',
'manage' => 'Verwalte deine Abonnements',
'unsubscribe' => 'Von E-Mail-Updates deabonnieren.',
'unsubscribed' => 'Ihre E-Mail-Abonnement wurde gekündigt.',
'failure' => 'Etwas ist mit dem Abonnement schief gelaufen.',
'already-subscribed' => 'Abonnement für :email konnte nicht registriert werden, da die E-Mail Adresse schon registriert ist.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
'text' => "Bitte bestätige die E-Mail-Benachrichtigungen unter :app_name status updates.\n:link",
'html' => '<p>Bitte bestätige deine E-Mail-Benachrichtigung unter :app_name status updates.</p>',
'button' => 'Abonnement bestätigen',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
'subject' => '[Planmäßige Wartung] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
'subject' => '[Neuer Vorfall] :status: :name',
],
'component' => [
'subject' => 'Komponent Status Update',

22
resources/lang/de/dashboard.php Executable file → Normal file
View File

@@ -150,7 +150,7 @@ return [
'title' => 'Einen neuen Abonnenten hinzufügen',
'success' => 'Abonnent hinzugefügt.',
'failure' => 'Etwas lief schief dem dem Hinzufügen eines Abonnenten. Bitte versuchen Sie es erneut.',
'help' => 'Gebe jeden Abonnenten in eine neue Zeile ein.',
'help' => 'Gib jeden Abonnenten in eine neue Zeile ein.',
],
'edit' => [
'title' => 'Abonnent aktualisieren',
@@ -220,12 +220,12 @@ return [
'failure' => 'Einstellungen konnten nicht gespeichert werden.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
'credits' => 'Danksagungen',
'contributors' => 'Unterstützer',
'license' => 'Cachet ist ein BSD-3-lizensiertes Open Source-Projekt, veröffentlicht von <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Unterstützer & Sponsoren',
'backers' => 'Wenn Du die Entwicklung der Software unterstützen möchtest, kannst Du unter <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> einen Beitrag leisten.',
'thank-you' => 'Vielen Dank an jeden der :count Unterstützer.',
],
],
@@ -251,10 +251,10 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
'support' => 'Cachet unterstützen',
'support_subtitle' => 'Unterstütze uns unter <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong>!',
'news' => 'Aktuelle Neuigkeiten',
'news_subtitle' => 'Erhalte die neusten Nachrichten',
],
// Welcome modal

4
resources/lang/de/forms.php Executable file → Normal file
View File

@@ -34,7 +34,7 @@ return [
'invalid' => 'Ungültiger Benutzername oder Passwort',
'invalid-token' => 'Token ist ungültig',
'cookies' => 'Sie müssen Cookies aktivieren um sich anzumelden.',
'rate-limit' => 'Rate limit exceeded.',
'rate-limit' => 'Maximale Anzahl von Bewertungen erreicht.',
],
// Incidents form fields
@@ -90,7 +90,7 @@ return [
'type_avg' => 'Durchschnitt',
'places' => 'Nachkommastellen',
'default_view' => 'Standardansicht',
'threshold' => 'How many minutes of threshold between metric points?',
'threshold' => 'Wie viele Minuten soll der Abstand zwischen den Messpunkten sein?',
'points' => [
'value' => 'Wert',

0
resources/lang/de/pagination.php Executable file → Normal file
View File

0
resources/lang/de/setup.php Executable file → Normal file
View File

54
resources/lang/de/validation.php Executable file → Normal file
View File

@@ -37,54 +37,54 @@ return [
'array' => ':attribute muss zwischen :min & :max Elemente haben.',
],
'boolean' => ':attribute muss zwischen :min & :max Elemente haben.',
'confirmed' => 'The :attribute field must be true or false.',
'date' => 'The :attribute confirmation does not match.',
'date_format' => 'The :attribute is not a valid date.',
'different' => 'The :attribute does not match the format :format.',
'digits' => 'The :attribute and :other must be different.',
'digits_between' => 'The :attribute must be :digits digits.',
'email' => 'The :attribute must be between :min and :max digits.',
'exists' => 'The :attribute must be a valid email address.',
'distinct' => 'The :attribute field has a duplicate value.',
'confirmed' => ':attribute Feld muss richtig oder falsch sein.',
'date' => ':attribute stimmt nicht mit der Bestätigung überein.',
'date_format' => ':attribute ist kein gültiges Datum.',
'different' => ':attribute entspricht nicht dem gültigen Format :format.',
'digits' => ':attribute und :other müssen sich unterscheiden.',
'digits_between' => ':attribute muss :digits Stellen haben.',
'email' => ':attribute soll mindestens :min und darf maximal :max Stellen haben.',
'exists' => ':attribute muss eine gültige Emailadresse sein.',
'distinct' => ':attribute hat doppelte Werte.',
'filled' => 'Das Format von :attribute ist ungültig.',
'image' => ':attribute muss ein Bild sein.',
'in' => ':attribute muss ein Bild sein.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The selected :attribute is invalid.',
'ip' => 'The :attribute must be an integer.',
'in_array' => ':attribute existiert nicht in :other.',
'integer' => 'Das ausgewählte :attribute ist ungültig.',
'ip' => ':attribute muss eine ganze Zahl sein.',
'json' => ':attribut muss ein gültiger JSON-String sein.',
'max' => [
'numeric' => 'The :attribute must be a valid IP address.',
'file' => 'The :attribute may not be greater than :max.',
'string' => 'The :attribute may not be greater than :max kilobytes.',
'numeric' => ':attribute muss eine gültige IP-Adresse sein.',
'file' => ':attribute darf nicht größer als :max sein.',
'string' => ':attribute darf nicht größer als :max kb sein.',
'array' => ':attribute darf nicht mehr als :max Elemente haben.',
],
'mimes' => ':attribute darf nicht mehr als :max Elemente haben.',
'min' => [
'numeric' => 'The :attribute must be a file of type: :values.',
'numeric' => ':attribute muss eine Datei des Typs :values sein.',
'file' => ':attribute muss mindestens :min Kilobytes groß sein.',
'string' => ':attribute muss mindestens :min Kilobytes groß sein.',
'array' => 'The :attribute must be at least :min characters.',
'array' => ':attribute muss mindestens :min Zeichen lang sein.',
],
'not_in' => 'The :attribute must have at least :min items.',
'numeric' => 'The selected :attribute is invalid.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute must be a number.',
'not_in' => ':attribute muss mindestens :min Elemente haben.',
'numeric' => 'Das ausgewählte :attribute ist ungültig.',
'present' => ':attribute muss ausgefüllt sein.',
'regex' => ':attribute muss eine Zahl sein.',
'required' => 'Das Format von :attribute ist ungültig.',
'required_if' => 'The :attribute field is required.',
'required_if' => ':attribute muss ausgefüllt sein.',
'required_unless' => 'Das :attribute Feld ist erforderlich außer :other hat den Wert :values.',
'required_with' => 'The :attribute field is required when :other is :value.',
'required_with' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',
'required_with_all' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',
'required_without' => ':attribute muss angegeben werden, wenn :values ausgefüllt wurde.',
'required_without_all' => 'The :attribute field is required when :values is not present.',
'same' => 'The :attribute field is required when none of :values are present.',
'required_without_all' => ':attribute muss angegeben werden, wenn :values nicht ausgefüllt wurde.',
'same' => ':attribute ist erforderlich, wenn keines von :values vorhanden ist.',
'size' => [
'numeric' => 'The :attribute and :other must match.',
'numeric' => ':attribute und :other müssen übereinstimmen.',
'file' => ':attribute muss :size Kilobytes groß sein.',
'string' => ':attribute muss :size Zeichen lang sein.',
'array' => ':attribute muss :size Zeichen lang sein.',
],
'string' => 'The :attribute must contain :size items.',
'string' => ':attribute muss :size Elemente beinhalten.',
'timezone' => ':attribute muss eine gültige Zeitzone sein.',
'unique' => ':attribute ist schon vergeben.',
'url' => 'Das Format von :attribute ist ungültig.',

0
resources/lang/el/cachet.php Executable file → Normal file
View File

0
resources/lang/el/dashboard.php Executable file → Normal file
View File

0
resources/lang/el/forms.php Executable file → Normal file
View File

0
resources/lang/el/pagination.php Executable file → Normal file
View File

0
resources/lang/el/setup.php Executable file → Normal file
View File

0
resources/lang/el/validation.php Executable file → Normal file
View File

0
resources/lang/en-UD/cachet.php Executable file → Normal file
View File

0
resources/lang/en-UD/dashboard.php Executable file → Normal file
View File

0
resources/lang/en-UD/forms.php Executable file → Normal file
View File

0
resources/lang/en-UD/pagination.php Executable file → Normal file
View File

0
resources/lang/en-UD/setup.php Executable file → Normal file
View File

0
resources/lang/en-UD/validation.php Executable file → Normal file
View File

0
resources/lang/en/cachet.php Executable file → Normal file
View File

6
resources/lang/en/dashboard.php Executable file → Normal file
View File

@@ -86,12 +86,12 @@ return [
'title' => 'Add a component',
'message' => 'You should add a component.',
'success' => 'Component created.',
'failure' => 'Something went wrong with the component, please try again.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'edit' => [
'title' => 'Edit a component',
'success' => 'Component updated.',
'failure' => 'Something went wrong with the component, please try again.',
'failure' => 'Something went wrong with the component group, please try again.',
],
'delete' => [
'success' => 'The component has been deleted!',
@@ -254,7 +254,7 @@ return [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
'news_subtitle' => 'Get the latest update',
],
// Welcome modal

5
resources/lang/en/forms.php Executable file → Normal file
View File

@@ -23,11 +23,6 @@ return [
'enable_google2fa' => 'Enable Google Two Factor Authentication',
'cache_driver' => 'Cache Driver',
'session_driver' => 'Session Driver',
'mail_driver' => 'Mail Driver',
'mail_host' => 'Mail Host',
'mail_address' => 'Mail From',
'mail_username' => 'Mail Client User',
'mail_password' => 'Mail Client Password',
],
// Login form fields

0
resources/lang/en/pagination.php Executable file → Normal file
View File

0
resources/lang/en/setup.php Executable file → Normal file
View File

0
resources/lang/en/validation.php Executable file → Normal file
View File

12
resources/lang/es/cachet.php Executable file → Normal file
View File

@@ -75,21 +75,21 @@ return [
'subscribe' => 'Suscríbete para recibir actualizaciones por correo electrónico.',
'subscribed' => 'Te has subscrito a las notificaciones por correo electrónico, por favor verifica tu correo electrónico para confirmar tu subscripción.',
'verified' => 'Tu subscripción por correo electrónico ha sido confirmada. Gracias!',
'manage' => 'Manage your subscription',
'manage' => 'Administre su suscripción',
'unsubscribe' => 'Darse de baja de alertas.',
'unsubscribed' => 'Tu subscripción de correo electrónico ha sido cancelada.',
'failure' => 'Algo salió mal con la subscripción.',
'already-subscribed' => 'No se puede suscribir :email porque ya esta suscrito.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
'text' => "Por favor confirme su subscripcion por correo a las actualizaciones de estado de :app_name.\n:link",
'html' => '<p>Por favor confirme su suscripción por correo a las actualizaciones de estado de :app_name.</p>',
'button' => 'Confirme su suscripción',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
'subject' => '[Mantenimiento programado] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
'subject' => '[Nuevo incidente] :status: :name',
],
'component' => [
'subject' => 'Actualización de estado del componente',

20
resources/lang/es/dashboard.php Executable file → Normal file
View File

@@ -220,12 +220,12 @@ return [
'failure' => 'La configuración no se podido guardar.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
'credits' => 'Créditos',
'contributors' => 'Colaboradores',
'license' => 'Cachet es un proyecto de código libre bajo la licencia BSD-3, liberado por <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Patrocinadores',
'backers' => 'Si desea apoyar futuros desarrollos, ingrese a la campaña de <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a>.',
'thank-you' => 'Gracias a todos y cada uno de los :count colaboradores.',
],
],
@@ -251,10 +251,10 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
'support' => 'Apoye Cachet',
'support_subtitle' => '¡Visite nuestro proyecto en la página de <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong>!',
'news' => 'Últimas noticias',
'news_subtitle' => 'Obtener las actualizaciones más recientes',
],
// Welcome modal

6
resources/lang/es/forms.php Executable file → Normal file
View File

@@ -31,10 +31,10 @@ return [
'email' => 'Correo electrónico',
'password' => 'Contraseña',
'2fauth' => 'Código de Autenticación',
'invalid' => 'Nombre de usuario o contraseña incorrectos',
'invalid' => 'Nombre de usuario o contraseña incorrecto',
'invalid-token' => 'Token inválido',
'cookies' => 'Usted debe habilitar cookies para logearse o iniciar sesion.',
'rate-limit' => 'Rate limit exceeded.',
'rate-limit' => 'Límite de transferencia excedido.',
],
// Incidents form fields
@@ -109,7 +109,7 @@ return [
'banner' => 'Imagen del banner',
'banner-help' => 'Se recomienda subir una imagen no más grande de 930px de ancho .',
'subscribers' => '¿Permitir a la gente inscribirse mediante noficiacion por correo electronico?',
'automatic_localization' => '¿Usar automáticamente la localización para página de estado según lenguaje del visitante?',
'automatic_localization' => '¿Traducir automáticamente la página de estado según el lenguaje del visitante?',
],
'analytics' => [
'analytics_google' => 'Código de Google Analytics',

0
resources/lang/es/pagination.php Executable file → Normal file
View File

0
resources/lang/es/setup.php Executable file → Normal file
View File

0
resources/lang/es/validation.php Executable file → Normal file
View File

0
resources/lang/fa/cachet.php Executable file → Normal file
View File

0
resources/lang/fa/dashboard.php Executable file → Normal file
View File

0
resources/lang/fa/forms.php Executable file → Normal file
View File

0
resources/lang/fa/pagination.php Executable file → Normal file
View File

0
resources/lang/fa/setup.php Executable file → Normal file
View File

0
resources/lang/fa/validation.php Executable file → Normal file
View File

2
resources/lang/fi/cachet.php Executable file → Normal file
View File

@@ -83,7 +83,7 @@ return [
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
'button' => 'Vahvista tilaus',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',

0
resources/lang/fi/dashboard.php Executable file → Normal file
View File

0
resources/lang/fi/forms.php Executable file → Normal file
View File

0
resources/lang/fi/pagination.php Executable file → Normal file
View File

0
resources/lang/fi/setup.php Executable file → Normal file
View File

8
resources/lang/fi/validation.php Executable file → Normal file
View File

@@ -46,7 +46,7 @@ return [
'email' => 'The :attribute must be between :min and :max digits.',
'exists' => 'The :attribute must be a valid email address.',
'distinct' => 'The :attribute field has a duplicate value.',
'filled' => 'The :attribute format is invalid.',
'filled' => 'Määritteen :attribute muoto on virheellinen.',
'image' => 'The :attribute must be an image.',
'in' => 'The :attribute must be an image.',
'in_array' => 'The :attribute field does not exist in :other.',
@@ -70,7 +70,7 @@ return [
'numeric' => 'The selected :attribute is invalid.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute must be a number.',
'required' => 'The :attribute format is invalid.',
'required' => 'Määritteen :attribute muoto on virheellinen.',
'required_if' => 'The :attribute field is required.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :other is :value.',
@@ -86,8 +86,8 @@ return [
],
'string' => 'The :attribute must contain :size items.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'url' => 'The :attribute format is invalid.',
'unique' => 'Määrite :attribute on jo käytetty.',
'url' => 'Määritteen :attribute muoto on virheellinen.',
/*
|--------------------------------------------------------------------------

12
resources/lang/fr/cachet.php Executable file → Normal file
View File

@@ -75,21 +75,21 @@ return [
'subscribe' => 'S\'abonner aux notifications par email.',
'subscribed' => 'Vous êtes abonné aux notifications par email, veuillez vérifier votre messagerie pour confirmer votre adresse.',
'verified' => 'Votre abonnement aux notifications par email a été confirmé. Merci !',
'manage' => 'Manage your subscription',
'manage' => 'Gérer votre abonnement',
'unsubscribe' => 'Désinscription des mises à jour par courriel.',
'unsubscribed' => 'Votre abonnement aux notifications par email a été annulé.',
'failure' => 'Une erreur est survenue lors de l\'abonnement.',
'already-subscribed' => 'Impossible de s\'abonner avec l\'adresse e-mail :email car celle-ci est déjà abonnée.',
'verify' => [
'text' => "Please confirm your email subscription to :app_name status updates.\n:link",
'html' => '<p>Please confirm your email subscription to :app_name status updates.</p>',
'button' => 'Confirm Subscription',
'text' => "Veuillez confirmer votre abonnement par courriel aux changements de statut de :app_name.\n:link",
'html' => '<p>Veuillez confirmer votre abonnement par courriel aux changements de statut de :app_name.</p>',
'button' => 'Confirmer l\'abonnement',
],
'maintenance' => [
'subject' => '[Maintenance Scheduled] :name',
'subject' => '[Maintenance planifiée] :name',
],
'incident' => [
'subject' => '[New Incident] :status: :name',
'subject' => '[Nouvel incident] :status: :name',
],
'component' => [
'subject' => 'Mise à jour du statut d\'un composant',

20
resources/lang/fr/dashboard.php Executable file → Normal file
View File

@@ -220,12 +220,12 @@ return [
'failure' => 'Les paramètres n\'ont pas pu être sauvegardés.',
],
'credits' => [
'credits' => 'Credits',
'contributors' => 'Contributors',
'license' => 'Cachet is a BSD-3-licensed open source project, released by <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Backers & Sponsors',
'backers' => 'If you\'d like to support future development, check out the <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a> campaign.',
'thank-you' => 'Thank you to each and every one of the :count contributors.',
'credits' => 'Crédits',
'contributors' => 'Contributeurs',
'license' => 'Cachet est un logiciel libre sous licence BSD-3 édité par <a href="https://alt-three.com/?utm_source=cachet&utm_medium=credits&utm_campaign=Cachet%20Credit%20Dashboard" target="_blank">Alt Three Services Limited</a>.',
'backers-title' => 'Partenaires financiers et sponsors',
'backers' => 'Si vous souhaitez aider des développements futurs jetez un œil à la campagne <a href="https://patreon.com/jbrooksuk" target="_blank">Cachet Patreon</a>.',
'thank-you' => 'Merci à chacun des :count contributeurs.',
],
],
@@ -251,10 +251,10 @@ return [
// Widgets
'widgets' => [
'support' => 'Support Cachet',
'support_subtitle' => 'Check out our <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong> page!',
'news' => 'Latest News',
'news_subtitle' => 'Get the latest updates',
'support' => 'Supportez Cachet',
'support_subtitle' => 'Jetez un œil à la page <strong><a href="https://patreon.com/jbrooksuk" target="_blank">Patreon</a></strong>!',
'news' => 'Dernières actualités',
'news_subtitle' => 'Obtenez les dernières mises à jour',
],
// Welcome modal

2
resources/lang/fr/forms.php Executable file → Normal file
View File

@@ -34,7 +34,7 @@ return [
'invalid' => 'Nom d\'utilisateur ou mot de passe incorrect',
'invalid-token' => 'Jeton invalide',
'cookies' => 'Vous devez activer les cookies pour vous connecter.',
'rate-limit' => 'Rate limit exceeded.',
'rate-limit' => 'Limite de tentatives atteinte.',
],
// Incidents form fields

0
resources/lang/fr/pagination.php Executable file → Normal file
View File

0
resources/lang/fr/setup.php Executable file → Normal file
View File

10
resources/lang/fr/validation.php Executable file → Normal file
View File

@@ -32,24 +32,24 @@ return [
'before' => ':attribute doit être une date inférieur à :date.',
'between' => [
'numeric' => ':attribute doit être une date inférieur à :date.',
'file' => ':attribute doit être comprise entre :min et :max.',
'string' => ':attribute doit être comprise entre :min et :max kilobytes.',
'file' => 'La valeur de :attribute doit être comprise entre :min et :max.',
'string' => 'La valeur :attribute doit être comprise entre :min et :max kilobytes.',
'array' => 'attribute doit être entre :min et :max éléments.',
],
'boolean' => 'attribute doit être entre :min et :max éléments.',
'confirmed' => 'Le champ :attribute doit être vrai ou faux.',
'date' => 'Le champ de confirmation :attribute ne correspond pas.',
'date' => 'La confirmation de :attribute ne correspond pas.',
'date_format' => ':attribute n\'est pas une date valide.',
'different' => ':attribute ne correspond pas au format :format.',
'digits' => ':attribute et :other doivent être différents.',
'digits_between' => ':attribute doit contenir :digits chiffres.',
'email' => ':attribute doit contenir entre :min et :max chiffres.',
'email' => 'La valeur de :attribute doit être comprise entre :min et :max chiffres.',
'exists' => ':attribute doit être une adresse électronique valide.',
'distinct' => ':attribute possède une valeur en double.',
'filled' => 'Le format de :attribute n\'est pas valide.',
'image' => ':attribute doit être une image.',
'in' => ':attribute doit être une image.',
'in_array' => 'Le champ de :attribute n\'existe pas dans :other.',
'in_array' => 'Le champ :attribute n\'existe pas dans :other.',
'integer' => 'Le sélection :attribute n\'est pas valide.',
'ip' => ':attribute doit être un entier.',
'json' => ':attribut doit être une chaîne JSON valide.',

0
resources/lang/he/cachet.php Executable file → Normal file
View File

0
resources/lang/he/dashboard.php Executable file → Normal file
View File

0
resources/lang/he/forms.php Executable file → Normal file
View File

0
resources/lang/he/pagination.php Executable file → Normal file
View File

0
resources/lang/he/setup.php Executable file → Normal file
View File

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