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
+7 -12
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
@@ -42,7 +42,7 @@ final class AddMetricPointCommand
* @var string[]
*/
public $rules = [
'value' => 'int',
'value' => 'numeric',
'created_at' => 'string',
];
@@ -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')) {
@@ -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);
@@ -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());
}
/**
@@ -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.
*
+1 -1
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));
}
/**
+194 -190
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');
});
});
});
}
@@ -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';
}
}
+9 -4
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'),
]);
+9 -4
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'),
]);
+4 -4
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'),
]);
Generated
+86 -86
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
File diff suppressed because one or more lines are too long
+2 -2
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"
}
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
+6 -6
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',
Executable → Regular
+11 -11
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
Executable → Regular
+2 -2
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',
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
+27 -27
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.',
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
View File
Executable → Regular
View File
View File
Executable → Regular
View File
View File
Executable → Regular
View File
Executable → Regular
+3 -3
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
Executable → Regular
-5
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
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
+6 -6
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',
Executable → Regular
+10 -10
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
Executable → Regular
+3 -3
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',
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
+1 -1
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',
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
+4 -4
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.',
/*
|--------------------------------------------------------------------------
Executable → Regular
+6 -6
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',
Executable → Regular
+10 -10
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
Executable → Regular
+1 -1
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
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
+5 -5
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.',
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File

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