mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Enable caching. Remove stuff for development.
This commit is contained in:
parent
5065b1ee03
commit
a84de5db77
19
CHANGELOG.md
19
CHANGELOG.md
@ -5,6 +5,25 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
- No unreleased changes yet.
|
- No unreleased changes yet.
|
||||||
|
|
||||||
|
[3.9.0]
|
||||||
|
### Added
|
||||||
|
- @zjean has added code that allows you to force "https://"-URL's.
|
||||||
|
- @tonicospinelli has added Portuguese (Brazil) translations.
|
||||||
|
- Firefly III supports the *splitting* of transactions:
|
||||||
|
- A withdrawal (expense) can be split into multiple sub-transactions (with multiple destinations)
|
||||||
|
- Likewise for deposits (incomes). You can set multiple sources.
|
||||||
|
- Likewise for transfers.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Update a lot of libraries.
|
||||||
|
- Big improvement to test data generation.
|
||||||
|
- Cleaned up many repositories.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Front page boxes will no longer respond to credit card bills.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Many bugs
|
||||||
|
|
||||||
## [3.8.4] - 2016-04-24
|
## [3.8.4] - 2016-04-24
|
||||||
### Added
|
### Added
|
||||||
|
@ -1 +0,0 @@
|
|||||||
src_dir: .
|
|
@ -1,2 +0,0 @@
|
|||||||
--exclude-exts=.min.css
|
|
||||||
--ignore=adjoining-classes,box-model,ids,order-alphabetical,unqualified-attributes
|
|
@ -1 +0,0 @@
|
|||||||
**/*{.,-}min.js
|
|
@ -1,213 +0,0 @@
|
|||||||
ecmaFeatures:
|
|
||||||
modules: true
|
|
||||||
jsx: true
|
|
||||||
|
|
||||||
env:
|
|
||||||
amd: true
|
|
||||||
browser: true
|
|
||||||
es6: true
|
|
||||||
jquery: true
|
|
||||||
node: true
|
|
||||||
|
|
||||||
# http://eslint.org/docs/rules/
|
|
||||||
rules:
|
|
||||||
# Possible Errors
|
|
||||||
comma-dangle: [2, never]
|
|
||||||
no-cond-assign: 2
|
|
||||||
no-console: 0
|
|
||||||
no-constant-condition: 2
|
|
||||||
no-control-regex: 2
|
|
||||||
no-debugger: 2
|
|
||||||
no-dupe-args: 2
|
|
||||||
no-dupe-keys: 2
|
|
||||||
no-duplicate-case: 2
|
|
||||||
no-empty: 2
|
|
||||||
no-empty-character-class: 2
|
|
||||||
no-ex-assign: 2
|
|
||||||
no-extra-boolean-cast: 2
|
|
||||||
no-extra-parens: 0
|
|
||||||
no-extra-semi: 2
|
|
||||||
no-func-assign: 2
|
|
||||||
no-inner-declarations: [2, functions]
|
|
||||||
no-invalid-regexp: 2
|
|
||||||
no-irregular-whitespace: 2
|
|
||||||
no-negated-in-lhs: 2
|
|
||||||
no-obj-calls: 2
|
|
||||||
no-regex-spaces: 2
|
|
||||||
no-sparse-arrays: 2
|
|
||||||
no-unexpected-multiline: 2
|
|
||||||
no-unreachable: 2
|
|
||||||
use-isnan: 2
|
|
||||||
valid-jsdoc: 0
|
|
||||||
valid-typeof: 2
|
|
||||||
|
|
||||||
# Best Practices
|
|
||||||
accessor-pairs: 2
|
|
||||||
block-scoped-var: 0
|
|
||||||
complexity: [2, 6]
|
|
||||||
consistent-return: 0
|
|
||||||
curly: 0
|
|
||||||
default-case: 0
|
|
||||||
dot-location: 0
|
|
||||||
dot-notation: 0
|
|
||||||
eqeqeq: 2
|
|
||||||
guard-for-in: 2
|
|
||||||
no-alert: 2
|
|
||||||
no-caller: 2
|
|
||||||
no-case-declarations: 2
|
|
||||||
no-div-regex: 2
|
|
||||||
no-else-return: 0
|
|
||||||
no-empty-label: 2
|
|
||||||
no-empty-pattern: 2
|
|
||||||
no-eq-null: 2
|
|
||||||
no-eval: 2
|
|
||||||
no-extend-native: 2
|
|
||||||
no-extra-bind: 2
|
|
||||||
no-fallthrough: 2
|
|
||||||
no-floating-decimal: 0
|
|
||||||
no-implicit-coercion: 0
|
|
||||||
no-implied-eval: 2
|
|
||||||
no-invalid-this: 0
|
|
||||||
no-iterator: 2
|
|
||||||
no-labels: 0
|
|
||||||
no-lone-blocks: 2
|
|
||||||
no-loop-func: 2
|
|
||||||
no-magic-number: 0
|
|
||||||
no-multi-spaces: 0
|
|
||||||
no-multi-str: 0
|
|
||||||
no-native-reassign: 2
|
|
||||||
no-new-func: 2
|
|
||||||
no-new-wrappers: 2
|
|
||||||
no-new: 2
|
|
||||||
no-octal-escape: 2
|
|
||||||
no-octal: 2
|
|
||||||
no-proto: 2
|
|
||||||
no-redeclare: 2
|
|
||||||
no-return-assign: 2
|
|
||||||
no-script-url: 2
|
|
||||||
no-self-compare: 2
|
|
||||||
no-sequences: 0
|
|
||||||
no-throw-literal: 0
|
|
||||||
no-unused-expressions: 2
|
|
||||||
no-useless-call: 2
|
|
||||||
no-useless-concat: 2
|
|
||||||
no-void: 2
|
|
||||||
no-warning-comments: 0
|
|
||||||
no-with: 2
|
|
||||||
radix: 2
|
|
||||||
vars-on-top: 0
|
|
||||||
wrap-iife: 2
|
|
||||||
yoda: 0
|
|
||||||
|
|
||||||
# Strict
|
|
||||||
strict: 0
|
|
||||||
|
|
||||||
# Variables
|
|
||||||
init-declarations: 0
|
|
||||||
no-catch-shadow: 2
|
|
||||||
no-delete-var: 2
|
|
||||||
no-label-var: 2
|
|
||||||
no-shadow-restricted-names: 2
|
|
||||||
no-shadow: 0
|
|
||||||
no-undef-init: 2
|
|
||||||
no-undef: 0
|
|
||||||
no-undefined: 0
|
|
||||||
no-unused-vars: 0
|
|
||||||
no-use-before-define: 0
|
|
||||||
|
|
||||||
# Node.js and CommonJS
|
|
||||||
callback-return: 2
|
|
||||||
global-require: 2
|
|
||||||
handle-callback-err: 2
|
|
||||||
no-mixed-requires: 0
|
|
||||||
no-new-require: 0
|
|
||||||
no-path-concat: 2
|
|
||||||
no-process-exit: 2
|
|
||||||
no-restricted-modules: 0
|
|
||||||
no-sync: 0
|
|
||||||
|
|
||||||
# Stylistic Issues
|
|
||||||
array-bracket-spacing: 0
|
|
||||||
block-spacing: 0
|
|
||||||
brace-style: 0
|
|
||||||
camelcase: 0
|
|
||||||
comma-spacing: 0
|
|
||||||
comma-style: 0
|
|
||||||
computed-property-spacing: 0
|
|
||||||
consistent-this: 0
|
|
||||||
eol-last: 0
|
|
||||||
func-names: 0
|
|
||||||
func-style: 0
|
|
||||||
id-length: 0
|
|
||||||
id-match: 0
|
|
||||||
indent: 0
|
|
||||||
jsx-quotes: 0
|
|
||||||
key-spacing: 0
|
|
||||||
linebreak-style: 0
|
|
||||||
lines-around-comment: 0
|
|
||||||
max-depth: 0
|
|
||||||
max-len: 0
|
|
||||||
max-nested-callbacks: 0
|
|
||||||
max-params: 0
|
|
||||||
max-statements: [2, 30]
|
|
||||||
new-cap: 0
|
|
||||||
new-parens: 0
|
|
||||||
newline-after-var: 0
|
|
||||||
no-array-constructor: 0
|
|
||||||
no-bitwise: 0
|
|
||||||
no-continue: 0
|
|
||||||
no-inline-comments: 0
|
|
||||||
no-lonely-if: 0
|
|
||||||
no-mixed-spaces-and-tabs: 0
|
|
||||||
no-multiple-empty-lines: 0
|
|
||||||
no-negated-condition: 0
|
|
||||||
no-nested-ternary: 0
|
|
||||||
no-new-object: 0
|
|
||||||
no-plusplus: 0
|
|
||||||
no-restricted-syntax: 0
|
|
||||||
no-spaced-func: 0
|
|
||||||
no-ternary: 0
|
|
||||||
no-trailing-spaces: 0
|
|
||||||
no-underscore-dangle: 0
|
|
||||||
no-unneeded-ternary: 0
|
|
||||||
object-curly-spacing: 0
|
|
||||||
one-var: 0
|
|
||||||
operator-assignment: 0
|
|
||||||
operator-linebreak: 0
|
|
||||||
padded-blocks: 0
|
|
||||||
quote-props: 0
|
|
||||||
quotes: 0
|
|
||||||
require-jsdoc: 0
|
|
||||||
semi-spacing: 0
|
|
||||||
semi: 0
|
|
||||||
sort-vars: 0
|
|
||||||
space-after-keywords: 0
|
|
||||||
space-before-blocks: 0
|
|
||||||
space-before-function-paren: 0
|
|
||||||
space-before-keywords: 0
|
|
||||||
space-in-parens: 0
|
|
||||||
space-infix-ops: 0
|
|
||||||
space-return-throw-case: 0
|
|
||||||
space-unary-ops: 0
|
|
||||||
spaced-comment: 0
|
|
||||||
wrap-regex: 0
|
|
||||||
|
|
||||||
# ECMAScript 6
|
|
||||||
arrow-body-style: 0
|
|
||||||
arrow-parens: 0
|
|
||||||
arrow-spacing: 0
|
|
||||||
constructor-super: 0
|
|
||||||
generator-star-spacing: 0
|
|
||||||
no-arrow-condition: 0
|
|
||||||
no-class-assign: 0
|
|
||||||
no-const-assign: 0
|
|
||||||
no-dupe-class-members: 0
|
|
||||||
no-this-before-super: 0
|
|
||||||
no-var: 0
|
|
||||||
object-shorthand: 0
|
|
||||||
prefer-arrow-callback: 0
|
|
||||||
prefer-const: 0
|
|
||||||
prefer-reflect: 0
|
|
||||||
prefer-spread: 0
|
|
||||||
prefer-template: 0
|
|
||||||
require-yield: 0
|
|
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"undef": true,
|
|
||||||
"unused": false,
|
|
||||||
"strict": true,
|
|
||||||
"browser": true,
|
|
||||||
"jquery": true,
|
|
||||||
"devel": true,
|
|
||||||
"globals": [
|
|
||||||
"language",
|
|
||||||
"token",
|
|
||||||
"currencyCode",
|
|
||||||
"$",
|
|
||||||
"token",
|
|
||||||
"accountID",
|
|
||||||
"billID",
|
|
||||||
"currentMonthName",
|
|
||||||
"previousMonthName",
|
|
||||||
"nextMonthName",
|
|
||||||
"everything",
|
|
||||||
"moment"
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<ruleset name="JamesStandard">
|
|
||||||
<rule ref="Zend">
|
|
||||||
<exclude name="Zend.NamingConventions.ValidVariableName" />
|
|
||||||
<exclude name="PEAR.WhiteSpace.ScopeClosingBrace" />
|
|
||||||
<!--<exclude name="PEAR.Whitespace.ScopeIndent"/>-->
|
|
||||||
<exclude name="PEAR.WhiteSpace.ScopeClosingBrace"/>
|
|
||||||
<exclude name="Generic.Formatting.MultipleStatementAlignment.Incorrect" />
|
|
||||||
<exclude name="PEAR.Functions.FunctionCallSignature" />
|
|
||||||
|
|
||||||
</rule>
|
|
||||||
<!--
|
|
||||||
Here we change two messages from the same sniff. Note how the
|
|
||||||
codes are slightly different because the sniff developer has
|
|
||||||
defined both a MaxExceeded message and a TooLong message. In the
|
|
||||||
case of this sniff, one is used for warnings and one is used
|
|
||||||
for errors.
|
|
||||||
-->
|
|
||||||
<rule ref="Generic.Files.LineLength">
|
|
||||||
<properties>
|
|
||||||
<property name="lineLimit" value="160"/>
|
|
||||||
<property name="absoluteLineLimit" value="160"/>
|
|
||||||
</properties>
|
|
||||||
</rule>
|
|
||||||
|
|
||||||
|
|
||||||
</ruleset>
|
|
@ -1,322 +0,0 @@
|
|||||||
<code_scheme name="Use This One">
|
|
||||||
<option name="RIGHT_MARGIN" value="160" />
|
|
||||||
<CoffeeScriptCodeStyleSettings>
|
|
||||||
<option name="SPACE_BEFORE_PROPERTY_COLON" value="true" />
|
|
||||||
</CoffeeScriptCodeStyleSettings>
|
|
||||||
<JSCodeStyleSettings>
|
|
||||||
<option name="ALIGN_MULTILINE_VAR_DECLARATION" value="true" />
|
|
||||||
</JSCodeStyleSettings>
|
|
||||||
<PHPCodeStyleSettings>
|
|
||||||
<option name="ALIGN_KEY_VALUE_PAIRS" value="true" />
|
|
||||||
<option name="ALIGN_PHPDOC_PARAM_NAMES" value="true" />
|
|
||||||
<option name="ALIGN_PHPDOC_COMMENTS" value="true" />
|
|
||||||
<option name="ALIGN_ASSIGNMENTS" value="true" />
|
|
||||||
<option name="COMMA_AFTER_LAST_ARRAY_ELEMENT" value="true" />
|
|
||||||
<option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
|
|
||||||
<option name="PHPDOC_BLANK_LINES_AROUND_PARAMETERS" value="true" />
|
|
||||||
<option name="PHPDOC_WRAP_LONG_LINES" value="true" />
|
|
||||||
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
|
|
||||||
<option name="LOWER_CASE_NULL_CONST" value="true" />
|
|
||||||
<option name="BLANK_LINE_BEFORE_RETURN_STATEMENT" value="true" />
|
|
||||||
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
|
|
||||||
<option name="ALIGN_CLASS_CONSTANTS" value="true" />
|
|
||||||
<option name="FORCE_SHORT_DECLARATION_ARRAY_STYLE" value="true" />
|
|
||||||
</PHPCodeStyleSettings>
|
|
||||||
<XML>
|
|
||||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
|
||||||
</XML>
|
|
||||||
<codeStyleSettings language="CoffeeScript">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JavaScript">
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="PHP">
|
|
||||||
<option name="RIGHT_MARGIN" value="160" />
|
|
||||||
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
|
||||||
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
|
||||||
<option name="ALIGN_GROUP_FIELD_DECLARATIONS" value="true" />
|
|
||||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="METHOD_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
|
||||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
|
||||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
|
||||||
<option name="BINARY_OPERATION_WRAP" value="1" />
|
|
||||||
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="TERNARY_OPERATION_WRAP" value="1" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_WRAP" value="1" />
|
|
||||||
<option name="FOR_STATEMENT_LPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_RPAREN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
|
||||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
|
||||||
<option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="3" />
|
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="3" />
|
|
||||||
<arrangement>
|
|
||||||
<tokens>
|
|
||||||
<token id="modifiers" name="modifiers">
|
|
||||||
<rules>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<PUBLIC>true</PUBLIC>
|
|
||||||
<STATIC>true</STATIC>
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<PROTECTED>true</PROTECTED>
|
|
||||||
<STATIC>true</STATIC>
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<PRIVATE>true</PRIVATE>
|
|
||||||
<STATIC>true</STATIC>
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<PUBLIC>true</PUBLIC>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<PROTECTED>true</PROTECTED>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<PRIVATE>true</PRIVATE>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</rules>
|
|
||||||
</token>
|
|
||||||
<token id="visibility" name="visibility">
|
|
||||||
<rules>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<PUBLIC>true</PUBLIC>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<PROTECTED>true</PROTECTED>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<PRIVATE>true</PRIVATE>
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</rules>
|
|
||||||
</token>
|
|
||||||
</tokens>
|
|
||||||
<groups>
|
|
||||||
<group>
|
|
||||||
<type>GETTERS_AND_SETTERS</type>
|
|
||||||
<order>KEEP</order>
|
|
||||||
</group>
|
|
||||||
</groups>
|
|
||||||
<rules>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<CONST />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PUBLIC />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PROTECTED />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PRIVATE />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PUBLIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PROTECTED />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<FIELD />
|
|
||||||
<PRIVATE />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<CONSTRUCTOR />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PUBLIC />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PROTECTED />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PRIVATE />
|
|
||||||
<STATIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PUBLIC />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PROTECTED />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<AND>
|
|
||||||
<METHOD />
|
|
||||||
<PRIVATE />
|
|
||||||
</AND>
|
|
||||||
</match>
|
|
||||||
<order>BY_NAME</order>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<TRAIT />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<INTERFACE />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<rule>
|
|
||||||
<match>
|
|
||||||
<CLASS />
|
|
||||||
</match>
|
|
||||||
</rule>
|
|
||||||
</section>
|
|
||||||
</rules>
|
|
||||||
</arrangement>
|
|
||||||
</codeStyleSettings>
|
|
||||||
</code_scheme>
|
|
@ -1,63 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# set testing environment
|
|
||||||
cp .env.testing .env
|
|
||||||
|
|
||||||
# set cover:
|
|
||||||
cp phpunit.cover.xml phpunit.xml
|
|
||||||
|
|
||||||
# delete test databases:
|
|
||||||
if [ -f storage/database/testing.db ]
|
|
||||||
then
|
|
||||||
echo "Will not remove test db"
|
|
||||||
# rm storage/database/testing.db
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f storage/database/testing-copy.db ]
|
|
||||||
then
|
|
||||||
echo "Will not remove test db"
|
|
||||||
# rm storage/database/testing-copy.db
|
|
||||||
fi
|
|
||||||
|
|
||||||
# test!
|
|
||||||
if [ -z "$1" ]
|
|
||||||
then
|
|
||||||
echo "Running all tests..."
|
|
||||||
phpunit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# test selective..
|
|
||||||
dirs=("acceptance/Controllers" "acceptance/Controllers/Auth" "acceptance/Controllers/Chart" "unit")
|
|
||||||
#
|
|
||||||
if [ ! -z "$1" ]
|
|
||||||
then
|
|
||||||
for i in "${dirs[@]}"
|
|
||||||
do
|
|
||||||
firstFile="./tests/$i/$1.php"
|
|
||||||
secondFile="./tests/$i/$1Test.php"
|
|
||||||
if [ -f "$firstFile" ]
|
|
||||||
then
|
|
||||||
# run it!
|
|
||||||
echo "Now running $firstFile"
|
|
||||||
phpunit $firstFile
|
|
||||||
result=$?
|
|
||||||
fi
|
|
||||||
if [ -f "$secondFile" ]
|
|
||||||
then
|
|
||||||
# run it!
|
|
||||||
echo "Now running $secondFile"
|
|
||||||
phpunit $secondFile
|
|
||||||
result=$?
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# restore .env file
|
|
||||||
cp .env.local .env
|
|
||||||
|
|
||||||
# restore cover
|
|
||||||
cp phpunit.default.xml phpunit.xml
|
|
||||||
|
|
||||||
exit ${result}
|
|
Binary file not shown.
@ -1,16 +0,0 @@
|
|||||||
var elixir = require('laravel-elixir');
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Elixir Asset Management
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Elixir provides a clean, fluent API for defining some basic Gulp tasks
|
|
||||||
| for your Laravel application. By default, we are compiling the Sass
|
|
||||||
| file for our application, as well as publishing vendor resources.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
elixir(function(mix) {
|
|
||||||
mix.sass('app.scss');
|
|
||||||
});
|
|
@ -1,55 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
command line:
|
|
||||||
|
|
||||||
phpmd app html ./_development/phpmd/phpmd.xml > ./public/result.html
|
|
||||||
|
|
||||||
-->
|
|
||||||
<ruleset name="pcsg-generated-ruleset"
|
|
||||||
xmlns="http://pmd.sf.net/ruleset/1.0.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
|
|
||||||
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
|
|
||||||
<description>Bla bla</description>
|
|
||||||
|
|
||||||
<!-- Import the entire controversial code rule set, except one -->
|
|
||||||
<rule ref="rulesets/controversial.xml">
|
|
||||||
<exclude name="CamelCasePropertyName"/>
|
|
||||||
</rule>
|
|
||||||
|
|
||||||
<!-- clean code -->
|
|
||||||
<!-- <rule ref="rulesets/cleancode.xml" /> -->
|
|
||||||
<rule ref="rulesets/codesize.xml"/>
|
|
||||||
<rule ref="rulesets/design.xml"/>
|
|
||||||
<rule ref="rulesets/naming.xml"/>
|
|
||||||
<rule ref="rulesets/unusedcode.xml"/>
|
|
||||||
|
|
||||||
<!-- clean code static calling rule can be a little more lax: -->
|
|
||||||
<rule ref="rulesets/cleancode.xml">
|
|
||||||
<exclude name="StaticAccess"/>
|
|
||||||
</rule>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- report level 5 for cyclomatic complexity -->
|
|
||||||
<rule ref="rulesets/codesize.xml/CyclomaticComplexity">
|
|
||||||
<properties>
|
|
||||||
<property name="reportLevel" value="5"/>
|
|
||||||
</properties>
|
|
||||||
</rule>
|
|
||||||
<rule ref="rulesets/codesize.xml/NPathComplexity">
|
|
||||||
<properties>
|
|
||||||
<property name="minimum" value="128"/>
|
|
||||||
</properties>
|
|
||||||
</rule>
|
|
||||||
<rule ref="rulesets/codesize.xml/ExcessiveMethodLength">
|
|
||||||
<properties>
|
|
||||||
<property name="minimum" value="40"/>
|
|
||||||
</properties>
|
|
||||||
</rule>
|
|
||||||
<rule ref="rulesets/codesize.xml/ExcessiveParameterList">
|
|
||||||
<properties>
|
|
||||||
<property name="minimum" value="5"/>
|
|
||||||
</properties>
|
|
||||||
</rule>
|
|
||||||
</ruleset>
|
|
@ -1,5 +0,0 @@
|
|||||||
suites:
|
|
||||||
main:
|
|
||||||
namespace: FireflyIII
|
|
||||||
psr4_prefix: FireflyIII
|
|
||||||
src_path: app
|
|
@ -1,63 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~ phpunit.cover.xml
|
|
||||||
~ Copyright (C) 2016 thegrumpydictator@gmail.com
|
|
||||||
~
|
|
||||||
~ This software may be modified and distributed under the terms
|
|
||||||
~ of the MIT license. See the LICENSE file for details.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<phpunit backupGlobals="false"
|
|
||||||
backupStaticAttributes="false"
|
|
||||||
bootstrap="bootstrap/autoload.php"
|
|
||||||
colors="true"
|
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="true"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnFailure="false">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Application Test Suite">
|
|
||||||
<directory>./tests/</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory suffix=".php">app/Http</directory>
|
|
||||||
</whitelist>
|
|
||||||
<blacklist>
|
|
||||||
<directory>vendor/</directory>
|
|
||||||
<directory>app/Console</directory>
|
|
||||||
<directory>app/Events</directory>
|
|
||||||
<directory>app/Exceptions</directory>
|
|
||||||
<directory>app/Generator</directory>
|
|
||||||
<directory>app/Handlers</directory>
|
|
||||||
<directory>app/Helpers</directory>
|
|
||||||
|
|
||||||
<directory>app/Jobs</directory>
|
|
||||||
<directory>app/Listeners</directory>
|
|
||||||
<directory>app/Models</directory>
|
|
||||||
<directory>app/Policies</directory>
|
|
||||||
<directory>app/Providers</directory>
|
|
||||||
<directory>app/Repositories</directory>
|
|
||||||
<directory>app/Rules</directory>
|
|
||||||
<directory>app/Sql</directory>
|
|
||||||
<directory>app/Support</directory>
|
|
||||||
<directory>app/Validation</directory>
|
|
||||||
|
|
||||||
<!-- and other directories, -->
|
|
||||||
</blacklist>
|
|
||||||
</filter>
|
|
||||||
<!--
|
|
||||||
Code coverage has never been slower.
|
|
||||||
-->
|
|
||||||
<logging>
|
|
||||||
<log type="coverage-clover" target="./storage/build/clover.xml" charset="UTF-8" />
|
|
||||||
</logging>
|
|
||||||
<php>
|
|
||||||
<env name="APP_ENV" value="testing"/>
|
|
||||||
<env name="CACHE_DRIVER" value="array"/>
|
|
||||||
<env name="SESSION_DRIVER" value="array"/>
|
|
||||||
<env name="QUEUE_DRIVER" value="sync"/>
|
|
||||||
</php>
|
|
||||||
</phpunit>
|
|
@ -1,31 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<phpunit backupGlobals="false"
|
|
||||||
backupStaticAttributes="false"
|
|
||||||
bootstrap="bootstrap/autoload.php"
|
|
||||||
colors="true"
|
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="true"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnFailure="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Application Test Suite">
|
|
||||||
<directory>./tests/</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory suffix=".php">app/</directory>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<php>
|
|
||||||
<env name="APP_ENV" value="testing"/>
|
|
||||||
<env name="CACHE_DRIVER" value="array"/>
|
|
||||||
<env name="SESSION_DRIVER" value="array"/>
|
|
||||||
<env name="QUEUE_DRIVER" value="sync"/>
|
|
||||||
</php>
|
|
||||||
|
|
||||||
<listeners>
|
|
||||||
<listener class="JohnKary\PHPUnit\Listener\SpeedTrapListener" />
|
|
||||||
</listeners>
|
|
||||||
</phpunit>
|
|
@ -1,31 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<phpunit backupGlobals="false"
|
|
||||||
backupStaticAttributes="false"
|
|
||||||
bootstrap="bootstrap/autoload.php"
|
|
||||||
colors="true"
|
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="true"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnFailure="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Application Test Suite">
|
|
||||||
<directory>./tests/</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory suffix=".php">app/</directory>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<php>
|
|
||||||
<env name="APP_ENV" value="testing"/>
|
|
||||||
<env name="CACHE_DRIVER" value="array"/>
|
|
||||||
<env name="SESSION_DRIVER" value="array"/>
|
|
||||||
<env name="QUEUE_DRIVER" value="sync"/>
|
|
||||||
</php>
|
|
||||||
|
|
||||||
<listeners>
|
|
||||||
<listener class="JohnKary\PHPUnit\Listener\SpeedTrapListener" />
|
|
||||||
</listeners>
|
|
||||||
</phpunit>
|
|
@ -1,103 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
searchFile=""
|
|
||||||
deleteDatabases=false
|
|
||||||
|
|
||||||
while getopts ":nhf:" opt; do
|
|
||||||
case $opt in
|
|
||||||
n)
|
|
||||||
# echo "-n was triggered: new database!" >&2
|
|
||||||
deleteDatabases=true
|
|
||||||
;;
|
|
||||||
f)
|
|
||||||
#echo "-f was triggered: file! $OPTARG" >&2
|
|
||||||
searchFile=$OPTARG
|
|
||||||
;;
|
|
||||||
h)
|
|
||||||
echo "n: new database" >&2
|
|
||||||
echo "f: which file to run" >&2
|
|
||||||
;;
|
|
||||||
:)
|
|
||||||
echo "Option -$OPTARG requires an argument." >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
\?)
|
|
||||||
echo "Invalid option: -$OPTARG" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# set testing environment
|
|
||||||
cp .env.testing .env
|
|
||||||
|
|
||||||
# set default phpunit.
|
|
||||||
cp phpunit.default.xml phpunit.xml
|
|
||||||
|
|
||||||
# "create" default attachment:
|
|
||||||
touch storage/upload/at-1.data
|
|
||||||
touch storage/upload/at-2.data
|
|
||||||
|
|
||||||
# delete databses:
|
|
||||||
if [ "$deleteDatabases" = true ] ; then
|
|
||||||
echo "Will delete and recreate the databases."
|
|
||||||
|
|
||||||
# delete test database:
|
|
||||||
if [ -f storage/database/testing.db ]
|
|
||||||
then
|
|
||||||
echo "Deleted testing.db"
|
|
||||||
rm storage/database/testing.db
|
|
||||||
fi
|
|
||||||
|
|
||||||
# delete test database copy:
|
|
||||||
if [ -f storage/database/testing-copy.db ]
|
|
||||||
then
|
|
||||||
echo "Delete testing-copy.db"
|
|
||||||
rm storage/database/testing-copy.db
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# do not delete database:
|
|
||||||
if [ "$deleteDatabases" = false ] ; then
|
|
||||||
echo "Will not delete databases."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# test!
|
|
||||||
if [ "$searchFile" == "" ]
|
|
||||||
then
|
|
||||||
echo "Running all tests..."
|
|
||||||
phpunit
|
|
||||||
result=$?
|
|
||||||
fi
|
|
||||||
|
|
||||||
# test selective..
|
|
||||||
dirs=("acceptance/Controllers" "acceptance/Controllers/Auth" "acceptance/Controllers/Chart" "unit")
|
|
||||||
#
|
|
||||||
if [ "$searchFile" != "" ]
|
|
||||||
then
|
|
||||||
echo "Will run test for '$searchFile'"
|
|
||||||
for i in "${dirs[@]}"
|
|
||||||
do
|
|
||||||
firstFile="./tests/$i/$searchFile.php"
|
|
||||||
secondFile="./tests/$i/"$searchFile"Test.php"
|
|
||||||
if [ -f "$firstFile" ]
|
|
||||||
then
|
|
||||||
# run it!
|
|
||||||
echo "Found file '$firstFile'"
|
|
||||||
phpunit --verbose $firstFile
|
|
||||||
result=$?
|
|
||||||
fi
|
|
||||||
if [ -f "$secondFile" ]
|
|
||||||
then
|
|
||||||
# run it!
|
|
||||||
echo "Found file '$secondFile'"
|
|
||||||
phpunit --verbose $secondFile
|
|
||||||
result=$?
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# restore .env file
|
|
||||||
cp .env.local .env
|
|
||||||
|
|
||||||
exit ${result}
|
|
@ -1 +0,0 @@
|
|||||||
These are some of the files I use for code formatting, PHPMD and PHPCS.
|
|
@ -250,8 +250,8 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
|
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
//$entries = $cache->get();
|
$entries = $cache->get();
|
||||||
//return view('categories.show', compact('category', 'journals', 'entries', 'hideCategory', 'subTitle'));
|
return view('accounts.show', compact('account', 'what', 'entries', 'subTitleIcon', 'journals', 'subTitle'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ class AccountController extends Controller
|
|||||||
$cache->addProperty('expenseAccounts');
|
$cache->addProperty('expenseAccounts');
|
||||||
$cache->addProperty('accounts');
|
$cache->addProperty('accounts');
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// return Response::json($cache->get());
|
return Response::json($cache->get());
|
||||||
}
|
}
|
||||||
$accounts = $repository->getAccountsByType(['Expense account', 'Beneficiary account']);
|
$accounts = $repository->getAccountsByType(['Expense account', 'Beneficiary account']);
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ class AccountController extends Controller
|
|||||||
$cache->addProperty('frontpage');
|
$cache->addProperty('frontpage');
|
||||||
$cache->addProperty('accounts');
|
$cache->addProperty('accounts');
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// return Response::json($cache->get());
|
return Response::json($cache->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
$frontPage = Preferences::get('frontPageAccounts', $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray());
|
$frontPage = Preferences::get('frontPageAccounts', $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray());
|
||||||
@ -151,7 +151,7 @@ class AccountController extends Controller
|
|||||||
$cache->addProperty('default');
|
$cache->addProperty('default');
|
||||||
$cache->addProperty($accounts);
|
$cache->addProperty($accounts);
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// return Response::json($cache->get());
|
return Response::json($cache->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
@ -196,7 +196,7 @@ class AccountController extends Controller
|
|||||||
$cache->addProperty('single');
|
$cache->addProperty('single');
|
||||||
$cache->addProperty($account->id);
|
$cache->addProperty($account->id);
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// return Response::json($cache->get());
|
return Response::json($cache->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
$format = (string)trans('config.month_and_day');
|
$format = (string)trans('config.month_and_day');
|
||||||
|
@ -308,7 +308,7 @@ class CategoryController extends Controller
|
|||||||
$cache->addProperty('specific-period');
|
$cache->addProperty('specific-period');
|
||||||
|
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// return $cache->get();
|
return $cache->get();
|
||||||
}
|
}
|
||||||
$entries = new Collection;
|
$entries = new Collection;
|
||||||
Log::debug('Start is ' . $start . ' en end is ' . $end);
|
Log::debug('Start is ' . $start . ' en end is ' . $end);
|
||||||
|
@ -100,7 +100,7 @@ class ReportController extends Controller
|
|||||||
$cache->addProperty($accounts);
|
$cache->addProperty($accounts);
|
||||||
$cache->addProperty($end);
|
$cache->addProperty($end);
|
||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
// return Response::json($cache->get());
|
return Response::json($cache->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// always per month.
|
// always per month.
|
||||||
|
Loading…
Reference in New Issue
Block a user