Various code for bills and rules.

This commit is contained in:
James Cole 2018-04-14 09:59:04 +02:00
parent 5862b832d9
commit d8a00f4314
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
22 changed files with 498 additions and 309 deletions

View File

@ -87,12 +87,13 @@ class VerifyDatabase extends Command
$this->createLinkTypes();
$this->createAccessTokens();
$this->fixDoubleAmounts();
$this->fixBadMeta();
}
/**
* Create user access tokens, if not present already.
*/
private function createAccessTokens()
private function createAccessTokens(): void
{
$count = 0;
$users = User::get();
@ -114,7 +115,7 @@ class VerifyDatabase extends Command
/**
* Create default link types if necessary.
*/
private function createLinkTypes()
private function createLinkTypes(): void
{
$count = 0;
$set = [
@ -140,7 +141,69 @@ class VerifyDatabase extends Command
}
}
private function fixDoubleAmounts()
/**
* Fix the situation where the matching transactions
* of a journal somehow have non-matching categories
* or budgets
*/
private function fixBadMeta(): void
{
// categories
$set = Transaction
::leftJoin('category_transaction', 'category_transaction.transaction_id', '=', 'transactions.id')
->whereNull('transactions.deleted_at')
->get(['transactions.id', 'transaction_journal_id', 'identifier', 'category_transaction.category_id', 'category_transaction.id as ct_id']);
$results = [];
foreach ($set as $obj) {
$key = $obj->transaction_journal_id . '-' . $obj->identifier;
$category = (int)$obj->category_id;
// value exists and is not category:
if (isset($results[$key]) && $results[$key] !== $category) {
$this->error(
sprintf(
'Transaction #%d referred to the wrong category. Was category #%d but is fixed to be category #%d.', $obj->transaction_journal_id, $category, $results[$key]
)
);
DB::table('category_transaction')->where('id', $obj->ct_id)->update(['category_id' => $results[$key]]);
}
// value does not exist:
if ($category > 0 && !isset($results[$key])) {
$results[$key] = $category;
}
}
// budgets
$set = Transaction
::leftJoin('budget_transaction', 'budget_transaction.transaction_id', '=', 'transactions.id')
->whereNull('transactions.deleted_at')
->get(['transactions.id', 'transaction_journal_id', 'identifier', 'budget_transaction.budget_id', 'budget_transaction.id as ct_id']);
$results = [];
foreach ($set as $obj) {
$key = $obj->transaction_journal_id . '-' . $obj->identifier;
$budget = (int)$obj->budget_id;
// value exists and is not budget:
if (isset($results[$key]) && $results[$key] !== $budget) {
$this->error(
sprintf(
'Transaction #%d referred to the wrong budget. Was budget #%d but is fixed to be budget #%d.', $obj->transaction_journal_id, $budget, $results[$key]
)
);
DB::table('budget_transaction')->where('id', $obj->ct_id)->update(['budget_id' => $results[$key]]);
}
// value does not exist:
if ($budget > 0 && !isset($results[$key])) {
$results[$key] = $budget;
}
}
}
private function fixDoubleAmounts(): void
{
$count = 0;
// get invalid journals
@ -186,8 +249,6 @@ class VerifyDatabase extends Command
if (0 === $count) {
$this->info('Amount integrity OK!');
}
return;
}
/**
@ -217,8 +278,6 @@ class VerifyDatabase extends Command
return true;
}
);
return;
}
/**
@ -246,7 +305,7 @@ class VerifyDatabase extends Command
/**
* Reports on budgets with no budget limits (which makes them pointless).
*/
private function reportBudgetLimits()
private function reportBudgetLimits(): void
{
$set = Budget::leftJoin('budget_limits', 'budget_limits.budget_id', '=', 'budgets.id')
->leftJoin('users', 'budgets.user_id', '=', 'users.id')
@ -270,7 +329,7 @@ class VerifyDatabase extends Command
/**
* Reports on deleted accounts that still have not deleted transactions or journals attached to them.
*/
private function reportDeletedAccounts()
private function reportDeletedAccounts(): void
{
$set = Account::leftJoin('transactions', 'transactions.account_id', '=', 'accounts.id')
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
@ -300,7 +359,7 @@ class VerifyDatabase extends Command
/**
* Report on journals with bad account types linked to them.
*/
private function reportIncorrectJournals()
private function reportIncorrectJournals(): void
{
$configuration = [
// a withdrawal can not have revenue account:
@ -342,7 +401,7 @@ class VerifyDatabase extends Command
/**
* Any deleted transaction journals that have transactions that are NOT deleted:.
*/
private function reportJournals()
private function reportJournals(): void
{
$count = 0;
$set = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
@ -373,7 +432,7 @@ class VerifyDatabase extends Command
/**
* Report on journals without transactions.
*/
private function reportNoTransactions()
private function reportNoTransactions(): void
{
$count = 0;
$set = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
@ -397,7 +456,7 @@ class VerifyDatabase extends Command
*
* @param string $name
*/
private function reportObject(string $name)
private function reportObject(string $name): void
{
$plural = str_plural($name);
$class = sprintf('FireflyIII\Models\%s', ucfirst($name));
@ -433,7 +492,7 @@ class VerifyDatabase extends Command
/**
* Reports for each user when the sum of their transactions is not zero.
*/
private function reportSum()
private function reportSum(): void
{
/** @var UserRepositoryInterface $userRepository */
$userRepository = app(UserRepositoryInterface::class);
@ -452,7 +511,7 @@ class VerifyDatabase extends Command
/**
* Reports on deleted transactions that are connected to a not deleted journal.
*/
private function reportTransactions()
private function reportTransactions(): void
{
$set = Transaction::leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->whereNotNull('transactions.deleted_at')

View File

@ -28,10 +28,10 @@ use FireflyIII\Helpers\Collector\JournalCollectorInterface;
use FireflyIII\Http\Requests\BillFormRequest;
use FireflyIII\Models\Bill;
use FireflyIII\Models\Note;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\TransactionRules\TransactionMatcher;
use FireflyIII\Transformers\BillTransformer;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
@ -220,6 +220,7 @@ class BillController extends Controller
* @param Bill $bill
*
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws \FireflyIII\Exceptions\FireflyException
*/
public function rescan(Request $request, BillRepositoryInterface $repository, Bill $bill)
{
@ -228,14 +229,22 @@ class BillController extends Controller
return redirect(URL::previous());
}
$journals = $repository->getPossiblyRelatedJournals($bill);
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
$repository->scan($bill, $journal);
$set = $repository->getRulesForBill($bill);
$total = 0;
foreach ($set as $rule) {
// simply fire off all rules?
/** @var TransactionMatcher $matcher */
$matcher = app(TransactionMatcher::class);
$matcher->setLimit(100000); // large upper limit
$matcher->setRange(100000); // large upper limit
$matcher->setRule($rule);
$matchingTransactions = $matcher->findTransactionsByRule();
$total += $matchingTransactions->count();
$repository->linkCollectionToBill($bill, $matchingTransactions);
}
$request->session()->flash('success', (string)trans('firefly.rescanned_bill'));
$request->session()->flash('success', (string)trans('firefly.rescanned_bill', ['total' => $total]));
Preferences::mark();
return redirect(URL::previous());
@ -250,6 +259,8 @@ class BillController extends Controller
*/
public function show(Request $request, BillRepositoryInterface $repository, Bill $bill)
{
// add info about rules:
$rules = $repository->getRulesForBill($bill);
$subTitle = $bill->name;
$start = session('start');
$end = session('end');
@ -278,7 +289,7 @@ class BillController extends Controller
$transactions->setPath(route('bills.show', [$bill->id]));
return view('bills.show', compact('transactions', 'yearAverage', 'overallAverage', 'year', 'object', 'bill', 'subTitle'));
return view('bills.show', compact('transactions', 'rules', 'yearAverage', 'overallAverage', 'year', 'object', 'bill', 'subTitle'));
}
/**

View File

@ -79,6 +79,8 @@ class RuleController extends Controller
*/
public function create(Request $request, RuleGroupRepositoryInterface $ruleGroupRepository, BillRepositoryInterface $billRepository, RuleGroup $ruleGroup)
{
$this->createDefaultRuleGroup();
$this->createDefaultRule();
$bill = null;
$billId = (int)$request->get('fromBill');
$preFilled = [];
@ -443,8 +445,8 @@ class RuleController extends Controller
* @param Rule $rule
*
* @return \Illuminate\Http\JsonResponse
*
* @throws Throwable
* @throws \FireflyIII\Exceptions\FireflyException
*/
public function testTriggersByRule(Rule $rule)
{
@ -466,10 +468,10 @@ class RuleController extends Controller
// Warn the user if only a subset of transactions is returned
$warning = '';
if (count($matchingTransactions) === $limit) {
if (\count($matchingTransactions) === $limit) {
$warning = trans('firefly.warning_transaction_subset', ['max_num_transactions' => $limit]); // @codeCoverageIgnore
}
if (0 === count($matchingTransactions)) {
if (0 === \count($matchingTransactions)) {
$warning = trans('firefly.warning_no_matching_transactions', ['num_transactions' => $range]); // @codeCoverageIgnore
}

View File

@ -339,6 +339,7 @@ class CsvProcessor implements FileProcessorInterface
{
$hash = $this->getRowHash($array);
$count = $this->repository->countByHash($hash);
Log::debug(sprintf('Hash is %s and count is %d', $hash, $count));
return $count > 0;
}

View File

@ -446,11 +446,24 @@ class ImportAccount
// 5: then maybe, create one:
Log::debug(sprintf('Found no account of type %s so must create one ourselves.', $this->expectedType));
// make sure name field is sensible.
$name = '(no name)';
if (isset($this->accountNumber['value'])) {
$name = $this->accountNumber['value'];
}
if (isset($this->accountIban['value'])) {
$name = $this->accountIban['value'];
}
if (isset($this->accountName['value'])) {
$name = $this->accountName['value'];
}
$data = [
'accountType' => config('firefly.shortNamesByFullName.' . $this->expectedType),
'name' => $this->accountName['value'] ?? '(no name)',
'name' => $name,
'iban' => $this->accountIban['value'] ?? null,
'active' => true,
'accountNumber' => $this->accountNumber['value'] ?? null,
'virtualBalance' => '0',
'account_type_id' => null,
'BIC' => $this->accountBic['value'] ?? null,

View File

@ -256,6 +256,7 @@ class ImportStorage
'sepa-country' => $importJournal->getMetaString('sepa-country'),
'sepa-ep' => $importJournal->getMetaString('sepa-ep'),
'sepa-ci' => $importJournal->getMetaString('sepa-ci'),
'importHash' => $importJournal->hash,
'transactions' => [
// single transaction:
[

View File

@ -28,6 +28,7 @@ use FireflyIII\Exceptions\FireflyException;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Database\Eloquent\Model;
use Log;
use FireflyIII\User;
/**
* Class Preference.
@ -71,9 +72,8 @@ class Preference extends Model
$serialized = true;
try {
unserialize($data, ['allowed_classes' => false]);
} catch (Exception $e) {
} /** @noinspection BadExceptionsProcessingInspection */ catch (Exception $e) {
$serialized = false;
Log::debug(sprintf('Could not unserialise preference #%d ("%s"). This is good. %s', $this->id, $this->name, $e->getMessage()));
}
if (!$serialized) {
$result = json_decode($data, true);
@ -103,6 +103,6 @@ class Preference extends Model
*/
public function user()
{
return $this->belongsTo('FireflyIII\User');
return $this->belongsTo(User::class);
}
}

View File

@ -367,6 +367,22 @@ class BillRepository implements BillRepositoryInterface
return $journals;
}
/**
* Return all rules for one bill
*
* @param Bill $bill
*
* @return Collection
*/
public function getRulesForBill(Bill $bill): Collection
{
return $this->user->rules()
->leftJoin('rule_actions', 'rule_actions.rule_id', '=', 'rules.id')
->where('rule_actions.action_type', 'link_to_bill')
->where('rule_actions.action_value', $bill->name)
->get(['rules.*']);
}
/**
* Return all rules related to the bills in the collection, in an associative array:
* 5= billid
@ -426,6 +442,21 @@ class BillRepository implements BillRepositoryInterface
return $avg;
}
/**
* Link a set of journals to a bill.
*
* @param Bill $bill
* @param Collection $journals
*/
public function linkCollectionToBill(Bill $bill, Collection $journals): void
{
$ids = $journals->pluck('id')->toArray();
DB::table('transaction_journals')
->where('user_id', $this->user->id)
->whereIn('id', $ids)
->update(['bill_id' => $bill->id]);
}
/**
* Given a bill and a date, this method will tell you at which moment this bill expects its next
* transaction. Whether or not it is there already, is not relevant.

View File

@ -140,6 +140,15 @@ interface BillRepositoryInterface
*/
public function getPossiblyRelatedJournals(Bill $bill): Collection;
/**
* Return all rules for one bill
*
* @param Bill $bill
*
* @return Collection
*/
public function getRulesForBill(Bill $bill): Collection;
/**
* Return all rules related to the bills in the collection, in an associative array:
* 5= billid
@ -160,6 +169,14 @@ interface BillRepositoryInterface
*/
public function getYearAverage(Bill $bill, Carbon $date): string;
/**
* Link a set of journals to a bill.
*
* @param Bill $bill
* @param Collection $journals
*/
public function linkCollectionToBill(Bill $bill, Collection $journals): void;
/**
* Given a bill and a date, this method will tell you at which moment this bill expects its next
* transaction. Whether or not it is there already, is not relevant.

View File

@ -54,7 +54,7 @@ class TransactionMatcher
* @return Collection
* @throws \FireflyIII\Exceptions\FireflyException
*/
public function findTransactionsByRule()
public function findTransactionsByRule(): Collection
{
if (0 === count($this->rule->ruleTriggers)) {
return new Collection;
@ -202,6 +202,10 @@ class TransactionMatcher
$collector = app(JournalCollectorInterface::class);
$collector->setUser(auth()->user());
$collector->setAllAssetAccounts()->setLimit($pageSize)->setPage($page)->setTypes($this->transactionTypes);
$set = $collector->getPaginatedJournals();
Log::debug(sprintf('Found %d journals to check. ', $set->count()));

View File

@ -68,7 +68,7 @@
"twig/twig": "1.*"
},
"require-dev": {
"barryvdh/laravel-debugbar": "3.*",
"roave/security-advisories": "dev-master",
"barryvdh/laravel-ide-helper": "2.*",
"filp/whoops": "2.*",
"fzaninotto/faker": "1.*",

536
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "3de47eba99b9bbd1bfb0f129fbf3494a",
"content-hash": "b8f72583ba830928cfc33001fdd96409",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -458,16 +458,16 @@
},
{
"name": "doctrine/dbal",
"version": "v2.6.3",
"version": "v2.7.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13"
"reference": "11037b4352c008373561dc6fc836834eed80c3b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/e3eed9b1facbb0ced3a0995244843a189e7d1b13",
"reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/11037b4352c008373561dc6fc836834eed80c3b5",
"reference": "11037b4352c008373561dc6fc836834eed80c3b5",
"shasum": ""
},
"require": {
@ -476,9 +476,11 @@
"php": "^7.1"
},
"require-dev": {
"phpunit/phpunit": "^5.4.6",
"doctrine/coding-standard": "^4.0",
"phpunit/phpunit": "^7.0",
"phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5",
"symfony/console": "2.*||^3.0"
"symfony/console": "^2.0.5||^3.0",
"symfony/phpunit-bridge": "^3.4.5|^4.0.5"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@ -489,7 +491,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.6.x-dev"
"dev-master": "2.7.x-dev"
}
},
"autoload": {
@ -527,7 +529,7 @@
"persistence",
"queryobject"
],
"time": "2017-11-19T13:38:54+00:00"
"time": "2018-04-07T18:44:18+00:00"
},
{
"name": "doctrine/inflector",
@ -652,23 +654,23 @@
},
{
"name": "dragonmantank/cron-expression",
"version": "v2.0.0",
"version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
"reference": "8a84aee649c3a3ba03a721c1fb080e08dfbcd68b"
"reference": "3f00985deec8df53d4cc1e5c33619bda1ee309a5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8a84aee649c3a3ba03a721c1fb080e08dfbcd68b",
"reference": "8a84aee649c3a3ba03a721c1fb080e08dfbcd68b",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/3f00985deec8df53d4cc1e5c33619bda1ee309a5",
"reference": "3f00985deec8df53d4cc1e5c33619bda1ee309a5",
"shasum": ""
},
"require": {
"php": ">=7.0.0"
},
"require-dev": {
"phpunit/phpunit": "~5.7"
"phpunit/phpunit": "~6.4"
},
"type": "library",
"autoload": {
@ -697,7 +699,7 @@
"cron",
"schedule"
],
"time": "2017-10-12T15:59:13+00:00"
"time": "2018-04-06T15:51:55+00:00"
},
{
"name": "egulias/email-validator",
@ -1085,16 +1087,16 @@
},
{
"name": "laravel/framework",
"version": "v5.6.15",
"version": "v5.6.16",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "baa42cf6bdd942523fafece21ec16a1843c6db0f"
"reference": "fcdbc791bc3e113ada38ab0a1147141fb9ec2b16"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/baa42cf6bdd942523fafece21ec16a1843c6db0f",
"reference": "baa42cf6bdd942523fafece21ec16a1843c6db0f",
"url": "https://api.github.com/repos/laravel/framework/zipball/fcdbc791bc3e113ada38ab0a1147141fb9ec2b16",
"reference": "fcdbc791bc3e113ada38ab0a1147141fb9ec2b16",
"shasum": ""
},
"require": {
@ -1159,6 +1161,7 @@
"aws/aws-sdk-php": "~3.0",
"doctrine/dbal": "~2.6",
"filp/whoops": "^2.1.4",
"league/flysystem-cached-adapter": "~1.0",
"mockery/mockery": "~1.0",
"moontoast/math": "^1.1",
"orchestra/testbench-core": "3.6.*",
@ -1177,7 +1180,7 @@
"guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).",
"laravel/tinker": "Required to use the tinker console command (~1.0).",
"league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
"league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).",
"league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).",
"league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
"league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).",
"nexmo/client": "Required to use the Nexmo transport (~1.0).",
@ -1219,7 +1222,7 @@
"framework",
"laravel"
],
"time": "2018-03-30T13:29:58+00:00"
"time": "2018-04-09T16:07:04+00:00"
},
{
"name": "laravel/passport",
@ -1292,16 +1295,16 @@
},
{
"name": "laravelcollective/html",
"version": "v5.6.5",
"version": "v5.6.6",
"source": {
"type": "git",
"url": "https://github.com/LaravelCollective/html.git",
"reference": "623a150c91e2d3f92eeee9f9eda58a841e3cb548"
"reference": "b3a10245c791a211e5f8ec37117f4549cd22aabe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/LaravelCollective/html/zipball/623a150c91e2d3f92eeee9f9eda58a841e3cb548",
"reference": "623a150c91e2d3f92eeee9f9eda58a841e3cb548",
"url": "https://api.github.com/repos/LaravelCollective/html/zipball/b3a10245c791a211e5f8ec37117f4549cd22aabe",
"reference": "b3a10245c791a211e5f8ec37117f4549cd22aabe",
"shasum": ""
},
"require": {
@ -1356,7 +1359,7 @@
],
"description": "HTML and Form Builders for the Laravel Framework",
"homepage": "https://laravelcollective.com",
"time": "2018-03-16T16:57:31+00:00"
"time": "2018-04-09T14:09:32+00:00"
},
{
"name": "lcobucci/jwt",
@ -1406,7 +1409,7 @@
{
"name": "Luís Otávio Cobucci Oblonczyk",
"email": "lcobucci@gmail.com",
"role": "Developer"
"role": "developer"
}
],
"description": "A simple library to work with JSON Web Token and JSON Web Signature",
@ -1604,16 +1607,16 @@
},
{
"name": "league/flysystem",
"version": "1.0.43",
"version": "1.0.44",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8"
"reference": "168dbe519737221dc87d17385cde33073881fd02"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1ce7cc142d906ba58dc54c82915d355a9191c8a8",
"reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/168dbe519737221dc87d17385cde33073881fd02",
"reference": "168dbe519737221dc87d17385cde33073881fd02",
"shasum": ""
},
"require": {
@ -1684,7 +1687,7 @@
"sftp",
"storage"
],
"time": "2018-03-01T10:27:04+00:00"
"time": "2018-04-06T09:58:14+00:00"
},
{
"name": "league/fractal",
@ -2013,16 +2016,16 @@
},
{
"name": "paragonie/random_compat",
"version": "v2.0.11",
"version": "v2.0.12",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8"
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8",
"reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
"shasum": ""
},
"require": {
@ -2057,7 +2060,7 @@
"pseudorandom",
"random"
],
"time": "2017-09-27T21:40:39+00:00"
"time": "2018-04-04T21:24:14+00:00"
},
{
"name": "phpseclib/phpseclib",
@ -2735,16 +2738,16 @@
},
{
"name": "symfony/console",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "555c8dbe0ae9e561740451eabdbed2cc554b6a51"
"reference": "aad9a6fe47319f22748fd764f52d3a7ca6fa6b64"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/555c8dbe0ae9e561740451eabdbed2cc554b6a51",
"reference": "555c8dbe0ae9e561740451eabdbed2cc554b6a51",
"url": "https://api.github.com/repos/symfony/console/zipball/aad9a6fe47319f22748fd764f52d3a7ca6fa6b64",
"reference": "aad9a6fe47319f22748fd764f52d3a7ca6fa6b64",
"shasum": ""
},
"require": {
@ -2799,20 +2802,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2018-02-26T15:55:47+00:00"
"time": "2018-04-03T05:24:00+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "c69f1e93aa898fd9fec627ebef467188151c8dc2"
"reference": "03f965583147957f1ecbad7ea1c9d6fd5e525ec2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/c69f1e93aa898fd9fec627ebef467188151c8dc2",
"reference": "c69f1e93aa898fd9fec627ebef467188151c8dc2",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/03f965583147957f1ecbad7ea1c9d6fd5e525ec2",
"reference": "03f965583147957f1ecbad7ea1c9d6fd5e525ec2",
"shasum": ""
},
"require": {
@ -2852,20 +2855,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2018-02-03T14:58:37+00:00"
"time": "2018-03-19T22:35:49+00:00"
},
{
"name": "symfony/debug",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "1721e4e7effb23480966690cdcdc7d2a4152d489"
"reference": "5961d02d48828671f5d8a7805e06579d692f6ede"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/1721e4e7effb23480966690cdcdc7d2a4152d489",
"reference": "1721e4e7effb23480966690cdcdc7d2a4152d489",
"url": "https://api.github.com/repos/symfony/debug/zipball/5961d02d48828671f5d8a7805e06579d692f6ede",
"reference": "5961d02d48828671f5d8a7805e06579d692f6ede",
"shasum": ""
},
"require": {
@ -2908,20 +2911,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2018-02-28T21:50:02+00:00"
"time": "2018-04-03T05:24:00+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "85eaf6a8ec915487abac52e133efc4a268204428"
"reference": "63353a71073faf08f62caab4e6889b06a787f07b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/85eaf6a8ec915487abac52e133efc4a268204428",
"reference": "85eaf6a8ec915487abac52e133efc4a268204428",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/63353a71073faf08f62caab4e6889b06a787f07b",
"reference": "63353a71073faf08f62caab4e6889b06a787f07b",
"shasum": ""
},
"require": {
@ -2971,20 +2974,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2018-02-14T14:11:10+00:00"
"time": "2018-04-06T07:35:43+00:00"
},
{
"name": "symfony/finder",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "44a796d2ecc2a16a5fc8f2956a34ee617934d55f"
"reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/44a796d2ecc2a16a5fc8f2956a34ee617934d55f",
"reference": "44a796d2ecc2a16a5fc8f2956a34ee617934d55f",
"url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
"reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49",
"shasum": ""
},
"require": {
@ -3020,20 +3023,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2018-03-05T18:28:26+00:00"
"time": "2018-04-04T05:10:37+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "6c181e81a3a9a7996c62ebd7803592536e729c5a"
"reference": "d0864a82e5891ab61d31eecbaa48bed5a09b8e6c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/6c181e81a3a9a7996c62ebd7803592536e729c5a",
"reference": "6c181e81a3a9a7996c62ebd7803592536e729c5a",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0864a82e5891ab61d31eecbaa48bed5a09b8e6c",
"reference": "d0864a82e5891ab61d31eecbaa48bed5a09b8e6c",
"shasum": ""
},
"require": {
@ -3073,20 +3076,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2018-03-05T16:01:10+00:00"
"time": "2018-04-03T05:24:00+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "2a1ebfe8c37240500befcb17bceb3893adacffa3"
"reference": "6dd620d96d64456075536ffe3c6c4658dd689021"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/2a1ebfe8c37240500befcb17bceb3893adacffa3",
"reference": "2a1ebfe8c37240500befcb17bceb3893adacffa3",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dd620d96d64456075536ffe3c6c4658dd689021",
"reference": "6dd620d96d64456075536ffe3c6c4658dd689021",
"shasum": ""
},
"require": {
@ -3159,7 +3162,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2018-03-05T22:27:01+00:00"
"time": "2018-04-06T16:25:03+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@ -3385,16 +3388,16 @@
},
{
"name": "symfony/process",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "6ed08502a7c9559da8e60ea343bdbd19c3350b3e"
"reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/6ed08502a7c9559da8e60ea343bdbd19c3350b3e",
"reference": "6ed08502a7c9559da8e60ea343bdbd19c3350b3e",
"url": "https://api.github.com/repos/symfony/process/zipball/d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
"reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25",
"shasum": ""
},
"require": {
@ -3430,7 +3433,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2018-02-19T12:18:43+00:00"
"time": "2018-04-03T05:24:00+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@ -3494,16 +3497,16 @@
},
{
"name": "symfony/routing",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "9c6268c1970c7e507bedc8946bece32a7db23515"
"reference": "0663036dd57dbfd4e9ff29f75bbd5dd3253ebe71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/9c6268c1970c7e507bedc8946bece32a7db23515",
"reference": "9c6268c1970c7e507bedc8946bece32a7db23515",
"url": "https://api.github.com/repos/symfony/routing/zipball/0663036dd57dbfd4e9ff29f75bbd5dd3253ebe71",
"reference": "0663036dd57dbfd4e9ff29f75bbd5dd3253ebe71",
"shasum": ""
},
"require": {
@ -3568,11 +3571,11 @@
"uri",
"url"
],
"time": "2018-02-28T21:50:02+00:00"
"time": "2018-04-04T13:50:32+00:00"
},
{
"name": "symfony/translation",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
@ -3640,16 +3643,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "c7d89044ed6ed3b7d8b558d509cca0666b947e58"
"reference": "e1b4d008100f4d203cc38b0d793ad6252d8d8af0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/c7d89044ed6ed3b7d8b558d509cca0666b947e58",
"reference": "c7d89044ed6ed3b7d8b558d509cca0666b947e58",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/e1b4d008100f4d203cc38b0d793ad6252d8d8af0",
"reference": "e1b4d008100f4d203cc38b0d793ad6252d8d8af0",
"shasum": ""
},
"require": {
@ -3705,7 +3708,7 @@
"debug",
"dump"
],
"time": "2018-02-26T15:55:47+00:00"
"time": "2018-04-04T05:10:37+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@ -3923,74 +3926,6 @@
}
],
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
"version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
"reference": "7a91480cc6e597caed5117a3c5d685f06d35c5a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/7a91480cc6e597caed5117a3c5d685f06d35c5a1",
"reference": "7a91480cc6e597caed5117a3c5d685f06d35c5a1",
"shasum": ""
},
"require": {
"illuminate/routing": "5.5.x|5.6.x",
"illuminate/session": "5.5.x|5.6.x",
"illuminate/support": "5.5.x|5.6.x",
"maximebf/debugbar": "~1.15.0",
"php": ">=7.0",
"symfony/debug": "^3|^4",
"symfony/finder": "^3|^4"
},
"require-dev": {
"illuminate/framework": "5.5.x"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2-dev"
},
"laravel": {
"providers": [
"Barryvdh\\Debugbar\\ServiceProvider"
],
"aliases": {
"Debugbar": "Barryvdh\\Debugbar\\Facade"
}
}
},
"autoload": {
"psr-4": {
"Barryvdh\\Debugbar\\": "src/"
},
"files": [
"src/helpers.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "PHP Debugbar integration for Laravel",
"keywords": [
"debug",
"debugbar",
"laravel",
"profiler",
"webprofiler"
],
"time": "2018-03-06T08:35:31+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
"version": "v2.4.3",
@ -4326,67 +4261,6 @@
],
"time": "2016-01-20T08:20:44+00:00"
},
{
"name": "maximebf/debugbar",
"version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
"reference": "30e7d60937ee5f1320975ca9bc7bcdd44d500f07"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/30e7d60937ee5f1320975ca9bc7bcdd44d500f07",
"reference": "30e7d60937ee5f1320975ca9bc7bcdd44d500f07",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/log": "^1.0",
"symfony/var-dumper": "^2.6|^3.0|^4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0|^5.0"
},
"suggest": {
"kriswallsmith/assetic": "The best way to manage assets",
"monolog/monolog": "Log using Monolog",
"predis/predis": "Redis storage"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.14-dev"
}
},
"autoload": {
"psr-4": {
"DebugBar\\": "src/DebugBar/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Maxime Bouroumeau-Fuseau",
"email": "maxime.bouroumeau@gmail.com",
"homepage": "http://maximebf.com"
},
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "Debug bar in the browser for php application",
"homepage": "https://github.com/maximebf/php-debugbar",
"keywords": [
"debug",
"debugbar"
],
"time": "2017-12-15T11:13:46+00:00"
},
{
"name": "mockery/mockery",
"version": "1.0",
@ -4899,16 +4773,16 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "6.0.1",
"version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "f8ca4b604baf23dab89d87773c28cc07405189ba"
"reference": "774a82c0c5da4c1c7701790c262035d235ab7856"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f8ca4b604baf23dab89d87773c28cc07405189ba",
"reference": "f8ca4b604baf23dab89d87773c28cc07405189ba",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/774a82c0c5da4c1c7701790c262035d235ab7856",
"reference": "774a82c0c5da4c1c7701790c262035d235ab7856",
"shasum": ""
},
"require": {
@ -4919,7 +4793,7 @@
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-token-stream": "^3.0",
"sebastian/code-unit-reverse-lookup": "^1.0.1",
"sebastian/environment": "^3.0",
"sebastian/environment": "^3.1",
"sebastian/version": "^2.0.1",
"theseer/tokenizer": "^1.1"
},
@ -4958,7 +4832,7 @@
"testing",
"xunit"
],
"time": "2018-02-02T07:01:41+00:00"
"time": "2018-04-06T15:39:20+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -5148,16 +5022,16 @@
},
{
"name": "phpunit/phpunit",
"version": "7.0.3",
"version": "7.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "536f4d853c12d8189963435088e8ff7c0daeab2e"
"reference": "6a17c170fb92845896e1b3b00fcb462cd4b3c017"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/536f4d853c12d8189963435088e8ff7c0daeab2e",
"reference": "536f4d853c12d8189963435088e8ff7c0daeab2e",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6a17c170fb92845896e1b3b00fcb462cd4b3c017",
"reference": "6a17c170fb92845896e1b3b00fcb462cd4b3c017",
"shasum": ""
},
"require": {
@ -5175,7 +5049,7 @@
"phpunit/php-file-iterator": "^1.4.3",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^2.0",
"phpunit/phpunit-mock-objects": "^6.0",
"phpunit/phpunit-mock-objects": "^6.1",
"sebastian/comparator": "^2.1",
"sebastian/diff": "^3.0",
"sebastian/environment": "^3.1",
@ -5198,7 +5072,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "7.0-dev"
"dev-master": "7.1-dev"
}
},
"autoload": {
@ -5224,20 +5098,20 @@
"testing",
"xunit"
],
"time": "2018-03-26T07:36:48+00:00"
"time": "2018-04-10T11:40:22+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
"version": "6.0.1",
"version": "6.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
"reference": "e3249dedc2d99259ccae6affbc2684eac37c2e53"
"reference": "3f5ca97eee66a07951d018f6726017629c85c86d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/e3249dedc2d99259ccae6affbc2684eac37c2e53",
"reference": "e3249dedc2d99259ccae6affbc2684eac37c2e53",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3f5ca97eee66a07951d018f6726017629c85c86d",
"reference": "3f5ca97eee66a07951d018f6726017629c85c86d",
"shasum": ""
},
"require": {
@ -5255,7 +5129,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.0.x-dev"
"dev-master": "6.1-dev"
}
},
"autoload": {
@ -5280,7 +5154,167 @@
"mock",
"xunit"
],
"time": "2018-02-15T05:27:38+00:00"
"time": "2018-04-06T08:14:40+00:00"
},
{
"name": "roave/security-advisories",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "c83f6aa0ed08f680c012656d411d1b7c94003012"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/c83f6aa0ed08f680c012656d411d1b7c94003012",
"reference": "c83f6aa0ed08f680c012656d411d1b7c94003012",
"shasum": ""
},
"conflict": {
"3f/pygmentize": "<1.2",
"adodb/adodb-php": "<5.20.6",
"amphp/artax": "<1.0.6|>=2,<2.0.6",
"amphp/http": "<1.0.1",
"asymmetricrypt/asymmetricrypt": ">=0,<9.9.99",
"aws/aws-sdk-php": ">=3,<3.2.1",
"bugsnag/bugsnag-laravel": ">=2,<2.0.2",
"cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.0.15|>=3.1,<3.1.4",
"cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4",
"cartalyst/sentry": "<=2.1.6",
"codeigniter/framework": "<=3.0.6",
"composer/composer": "<=1.0.0-alpha11",
"contao-components/mediaelement": ">=2.14.2,<2.21.1",
"contao/core": ">=2,<3.5.32",
"contao/core-bundle": ">=4,<4.4.8",
"contao/listing-bundle": ">=4,<4.4.8",
"contao/newsletter-bundle": ">=4,<4.1",
"doctrine/annotations": ">=1,<1.2.7",
"doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2",
"doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1",
"doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2",
"doctrine/doctrine-bundle": "<1.5.2",
"doctrine/doctrine-module": "<=0.7.1",
"doctrine/mongodb-odm": ">=1,<1.0.2",
"doctrine/mongodb-odm-bundle": ">=2,<3.0.1",
"doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1",
"dompdf/dompdf": ">=0.6,<0.6.2",
"drupal/core": ">=7,<7.58|>=8,<8.4.6|>=8.5,<8.5.1",
"drupal/drupal": ">=7,<7.58|>=8,<8.4.6|>=8.5,<8.5.1",
"erusev/parsedown": "<1.7",
"ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.3|>=5.4,<5.4.11.3|>=2017.8,<2017.8.1.1|>=2017.12,<2017.12.2.1",
"firebase/php-jwt": "<2",
"friendsofsymfony/rest-bundle": ">=1.2,<1.2.2",
"friendsofsymfony/user-bundle": ">=1.2,<1.3.5",
"gree/jose": "<=2.2",
"gregwar/rst": "<1.0.3",
"guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1",
"illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10",
"illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29",
"illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
"joomla/session": "<1.3.1",
"laravel/framework": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15",
"laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10",
"magento/magento1ce": ">=1.5.0.1,<1.9.3.2",
"magento/magento1ee": ">=1.9,<1.14.3.2",
"magento/magento2ce": ">=2,<2.2",
"monolog/monolog": ">=1.8,<1.12",
"namshi/jose": "<2.2",
"onelogin/php-saml": "<2.10.4",
"oro/crm": ">=1.7,<1.7.4",
"oro/platform": ">=1.7,<1.7.4",
"padraic/humbug_get_contents": "<1.1.2",
"pagarme/pagarme-php": ">=0,<3",
"paragonie/random_compat": "<2",
"phpmailer/phpmailer": ">=5,<5.2.24",
"phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3",
"phpxmlrpc/extras": "<0.6.1",
"propel/propel": ">=2.0.0-alpha1,<=2.0.0-alpha7",
"propel/propel1": ">=1,<=1.7.1",
"pusher/pusher-php-server": "<2.2.1",
"sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9",
"shopware/shopware": "<5.3.7",
"silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11",
"silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3",
"silverstripe/framework": ">=3,<3.3",
"silverstripe/userforms": "<3",
"simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4",
"simplesamlphp/simplesamlphp": "<1.15.2",
"simplesamlphp/simplesamlphp-module-infocard": "<1.0.1",
"socalnick/scn-social-auth": "<1.15.2",
"squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1",
"stormpath/sdk": ">=0,<9.9.99",
"swiftmailer/swiftmailer": ">=4,<5.4.5",
"symfony/dependency-injection": ">=2,<2.0.17",
"symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2",
"symfony/http-foundation": ">=2,<2.3.27|>=2.4,<2.5.11|>=2.6,<2.6.6",
"symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8",
"symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/routing": ">=2,<2.0.19",
"symfony/security": ">=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9|>=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8.23,<2.8.25|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
"symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.6|>=2.8.23,<2.8.25|>=3,<3.0.6|>=3.2.10,<3.2.12|>=3.3.3,<3.3.5",
"symfony/security-csrf": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/serializer": ">=2,<2.0.11",
"symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13",
"symfony/translation": ">=2,<2.0.17",
"symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3",
"symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4",
"symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7",
"thelia/backoffice-default-template": ">=2.1,<2.1.2",
"thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2",
"titon/framework": ">=0,<9.9.99",
"twig/twig": "<1.20",
"typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.22|>=8,<8.7.5",
"typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5",
"typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4",
"willdurand/js-translation-bundle": "<2.1.1",
"yiisoft/yii": ">=1.1.14,<1.1.15",
"yiisoft/yii2": "<2.0.15",
"yiisoft/yii2-bootstrap": "<2.0.4",
"yiisoft/yii2-dev": "<2.0.15",
"yiisoft/yii2-elasticsearch": "<2.0.5",
"yiisoft/yii2-gii": "<2.0.4",
"yiisoft/yii2-jui": "<2.0.4",
"yiisoft/yii2-redis": "<2.0.8",
"zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3",
"zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2",
"zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2",
"zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5",
"zendframework/zend-diactoros": ">=1,<1.0.4",
"zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1",
"zendframework/zend-http": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.3,<2.3.8|>=2.4,<2.4.1",
"zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6",
"zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3",
"zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2",
"zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1",
"zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4",
"zendframework/zend-validator": ">=2.3,<2.3.6",
"zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1",
"zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6",
"zendframework/zendframework": ">=2,<2.4.11|>=2.5,<2.5.1",
"zendframework/zendframework1": "<1.12.20",
"zendframework/zendopenid": ">=2,<2.0.2",
"zendframework/zendxml": ">=1,<1.0.1",
"zetacomponents/mail": "<1.8.2",
"zf-commons/zfc-user": "<1.2.2",
"zfcampus/zf-apigility-doctrine": ">=1,<1.0.3",
"zfr/zfr-oauth2-server-module": "<0.1.2"
},
"type": "metapackage",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"role": "maintainer"
}
],
"description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
"time": "2018-04-02T06:47:13+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@ -5847,7 +5881,7 @@
},
{
"name": "symfony/class-loader",
"version": "v3.4.6",
"version": "v3.4.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/class-loader.git",
@ -5903,16 +5937,16 @@
},
{
"name": "symfony/config",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "289eadd3771f7682ea2540e4925861c18ec5b4d0"
"reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/289eadd3771f7682ea2540e4925861c18ec5b4d0",
"reference": "289eadd3771f7682ea2540e4925861c18ec5b4d0",
"url": "https://api.github.com/repos/symfony/config/zipball/7c19370ab04e9ac05b74a504198e165f5ccf6dd8",
"reference": "7c19370ab04e9ac05b74a504198e165f5ccf6dd8",
"shasum": ""
},
"require": {
@ -5961,11 +5995,11 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
"time": "2018-02-04T16:43:51+00:00"
"time": "2018-03-19T22:35:49+00:00"
},
{
"name": "symfony/filesystem",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
@ -6014,7 +6048,7 @@
},
{
"name": "symfony/stopwatch",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
@ -6063,16 +6097,16 @@
},
{
"name": "symfony/yaml",
"version": "v4.0.6",
"version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "de5f125ea39de846b90b313b2cfb031a0152d223"
"reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/de5f125ea39de846b90b313b2cfb031a0152d223",
"reference": "de5f125ea39de846b90b313b2cfb031a0152d223",
"url": "https://api.github.com/repos/symfony/yaml/zipball/8b34ebb5989df61cbd77eff29a02c4db9ac1069c",
"reference": "8b34ebb5989df61cbd77eff29a02c4db9ac1069c",
"shasum": ""
},
"require": {
@ -6117,7 +6151,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"time": "2018-02-19T20:08:53+00:00"
"time": "2018-04-03T05:24:00+00:00"
},
{
"name": "theseer/tokenizer",
@ -6212,7 +6246,9 @@
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {
"roave/security-advisories": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {

View File

@ -88,8 +88,8 @@ return [
'is_demo_site' => false,
],
'encryption' => null === env('USE_ENCRYPTION') || env('USE_ENCRYPTION') === true,
'version' => '4.7.2.2',
'api_version' => '0.1',
'version' => '4.7.3',
'api_version' => '0.2',
'db_version' => 3,
'maxUploadSize' => 15242880,
'allowedMimes' => [

View File

@ -69,7 +69,7 @@ return [
],
],
'bunq' => [
'server' => 'api.bunq.com',
'server' => 'sandbox.public.api.bunq.com', // sandbox.public.api.bunq.com - api.bunq.com
'version' => 'v1',
],
],

View File

@ -124,6 +124,7 @@ return [
// bills: index, create, show
'bills_index' => [
'rules' => ['element' => '.rules'],
'paid_in_period' => ['element' => '.paid_in_period'],
'expected_in_period' => ['element' => '.expected_in_period'],
],

View File

@ -310,6 +310,13 @@ function createAutoComplete(input, URI) {
function testRuleTriggers() {
"use strict";
// find the button:
var button = $('.test_rule_triggers');
// replace with spinner. fa-spin fa-spinner
button.html('<i class="fa fa-spin fa-spinner"></i> ' + testRuleTriggersText);
button.attr('disabled', 'disabled');
// Serialize all trigger data
var triggerData = $(".rule-trigger-tbody").find("input[type=text], input[type=checkbox], select").serializeArray();
@ -319,7 +326,7 @@ function testRuleTriggers() {
// Set title and body
modal.find(".transactions-list").html(data.html);
button.attr('disabled', '');
// Show warning if appropriate
if (data.warning) {
modal.find(".transaction-warning .warning-contents").text(data.warning);
@ -327,7 +334,8 @@ function testRuleTriggers() {
} else {
modal.find(".transaction-warning").hide();
}
button.removeAttr('disabled');
button.html('<i class="fa fa-flask"></i> ' + testRuleTriggersText);
// Show the modal dialog
modal.modal();
}).fail(function () {

View File

@ -27,11 +27,7 @@
<table class="table table-striped">
<tr>
<td colspan="2">
{{ 'matching_on'|_ }}
{% for word in object.data.match %}
<span class="label label-info">{{ word }}</span>
{% endfor %}
{{ trans('firefly.between_amounts', {low: object.data.amount_min|formatAmount, high: object.data.amount_max|formatAmount })|raw }}
{{ trans('firefly.match_between_amounts', {low: object.data.amount_min|formatAmount, high: object.data.amount_max|formatAmount })|raw }}
{{ 'repeats'|_ }}
{{ trans('firefly.repeat_freq_' ~object.data.repeat_freq) }}.
</td>
@ -60,8 +56,8 @@
<td>{{ 'next_expected_match'|_ }}</td>
<td>
{% if object.data.next_expected_match|length > 0 %}
{{ formatDate(object.data.next_expected_match, monthAndDayFormat) }}
{% else %}
{{ formatDate(object.data.next_expected_match, monthAndDayFormat) }}
{% else %}
{{ 'unknown'|_ }}
{% endif %}
</td>
@ -79,21 +75,19 @@
</div>
</div>
<div class="col-lg-6 col-sm-12 col-md-12">
<div class="box" id="billButtons">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'more'|_ }}</h3>
<h3 class="box-title">{{ 'bill_related_rules'|_ }}</h3>
</div>
<div class="box-body no-padding">
{% if object.data.notes|length > 0 %}
<table class="table">
<tr>
<td>{{ trans('list.notes') }}</td>
<td class="markdown">{{ object.data.notes|markdown }}</td>
</tr>
</table>
<div class="box-body">
{% if rules.count > 0 %}
<ul>
{% for rule in rules %}
<li><a href="{{ route('rules.edit', [rule.id]) }}">{{ rule.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
</div>
<div class="box-footer">
<a href="{{ route('bills.rescan',object.data.id) }}" class="btn btn-default">{{ 'rescan_old'|_ }}</a>
</div>

View File

@ -42,7 +42,7 @@
{% endif %}
</td>
<td class="hidden-sm hidden-md hidden-xs">
<td class="hidden-sm hidden-md hidden-xs rules">
{% if entry.rules|length > 0 %}
<ul class="list-unstyled">
{% for rule in entry.rules %}

View File

@ -96,6 +96,15 @@
</div>
</a>
</li>
<li>
<a href="{{ route('rules.create') }}">
<i class="menu-icon fa fa-random bg-red"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">{{ 'new_rule'|_ }}</h4>
</div>
</a>
</li>
</ul>

View File

@ -82,7 +82,7 @@
<p>
<br/>
<button type="button" class="btn btn-default add_rule_trigger">{{ 'add_rule_trigger'|_ }}</button>
<a href="#" class="btn btn-default test_rule_triggers">{{ 'test_rule_triggers'|_ }}</a>
<a href="#" class="btn btn-default test_rule_triggers"><i class="fa fa-flask"></i> {{ 'test_rule_triggers'|_ }}</a>
</p>
</div>
</div>
@ -148,6 +148,7 @@
<script type="text/javascript">
var triggerCount = {{ triggerCount }};
var actionCount = {{ actionCount }};
var testRuleTriggersText = '{{ 'test_rule_triggers'|_|escape('js') }}';
</script>
<script type="text/javascript" src="js/ff/rules/create-edit.js?v={{ FF_VERSION }}"></script>

View File

@ -128,6 +128,7 @@
<script type="text/javascript">
var triggerCount = {{ triggerCount }};
var actionCount = {{ actionCount }};
var testRuleTriggersText = '{{ 'test_rule_triggers'|_|escape('js') }}';
</script>
<script type="text/javascript" src="js/ff/rules/create-edit.js?v={{ FF_VERSION }}"></script>

View File

@ -713,7 +713,7 @@ Route::group(
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'rules', 'as' => 'rules.'], function () {
Route::get('', ['uses' => 'RuleController@index', 'as' => 'index']);
Route::get('create/{ruleGroup}', ['uses' => 'RuleController@create', 'as' => 'create']);
Route::get('create/{ruleGroup?}', ['uses' => 'RuleController@create', 'as' => 'create']);
Route::get('up/{rule}', ['uses' => 'RuleController@up', 'as' => 'up']);
Route::get('down/{rule}', ['uses' => 'RuleController@down', 'as' => 'down']);
Route::get('edit/{rule}', ['uses' => 'RuleController@edit', 'as' => 'edit']);