Skip to content

Commit

Permalink
3.0.0 Release
Browse files Browse the repository at this point in the history
  • Loading branch information
lcharette authored Apr 21, 2020
2 parents 1310565 + d83ae58 commit c6a2964
Show file tree
Hide file tree
Showing 25 changed files with 1,205 additions and 234 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

.DS_Store
assets/vendor/
.phpunit.result.cache
.vscode
.php_cs.cache
113 changes: 113 additions & 0 deletions .php_cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<?php

$header = 'UserFrosting Breadcrumb Sprinkle
@link https://github.com/lcharette/UF_Breadcrumb
@copyright Copyright (c) 2020 Louis Charette
@license https://github.com/lcharette/UF_Breadcrumb/blob/master/LICENSE (MIT License)';

$rules = [
'@PSR2' => true,
'array_indentation' => true,
'array_syntax' => ['syntax' => 'short'],
'binary_operator_spaces' => ['align_double_arrow' => true, 'align_equals' => false],
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => true,
'blank_line_before_return' => true,
'braces' => true,
'cast_spaces' => true,
'class_definition' => true,
'concat_space' => ['spacing' => 'one'],
'declare_equal_normalize' => true,
'elseif' => true,
'encoding' => true,
'full_opening_tag' => true,
'function_declaration' => true,
'function_typehint_space' => true,
'hash_to_slash_comment' => true,
'heredoc_to_nowdoc' => true,
'include' => true,
'indentation_type' => true,
'line_ending' => true,
'lowercase_cast' => true,
'lowercase_constants' => true,
'lowercase_keywords' => true,
'method_argument_space' => true,
'method_separation' => true,
'multiline_whitespace_before_semicolons' => true,
'native_function_casing' => true,
'new_with_braces' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_break_comment' => true,
'no_closing_tag' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => ['use' => 'echo'],
'no_multiline_whitespace_around_double_arrow' => true,
'no_short_bool_cast' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_after_function_name' => true,
'no_spaces_around_offset' => true,
'no_spaces_inside_parenthesis' => true,
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_unneeded_control_parentheses' => true,
'no_unreachable_default_argument_value' => true,
'no_unused_imports' => true,
'no_useless_return' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
'phpdoc_align' => true,
'phpdoc_indent' => true,
'phpdoc_inline_tag' => true,
'phpdoc_no_empty_return' => true,
'phpdoc_no_access' => true,
'phpdoc_no_alias_tag' => ['type' => 'var'],
'phpdoc_no_package' => true,
'phpdoc_order' => true,
'phpdoc_scalar' => true,
'phpdoc_single_line_var_spacing' => true,
'phpdoc_trim' => true,
'phpdoc_types' => true,
'psr4' => true,
'short_scalar_cast' => true,
'simplified_null_return' => true,
'single_blank_line_at_eof' => true,
'single_blank_line_before_namespace' => true,
'single_class_element_per_statement' => true,
'single_import_per_statement' => true,
'single_line_after_imports' => true,
'single_quote' => true,
'space_after_semicolon' => true,
'standardize_not_equals' => true,
'switch_case_semicolon_to_colon' => true,
'switch_case_space' => true,
'ternary_operator_spaces' => true,
'trailing_comma_in_multiline_array' => true,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'visibility_required' => true,
'whitespace_after_comma_in_array' => true,

'header_comment' => [
'header' => $header
]
];

$finder = PhpCsFixer\Finder::create()
->in([__DIR__ . '/src', __DIR__ . '/tests']);

return PhpCsFixer\Config::create()
->setRules($rules)
->setFinder($finder)
->setUsingCache(true)
->setCacheFile(__DIR__.'/.php_cs.cache')
->setRiskyAllowed(true);
13 changes: 13 additions & 0 deletions .styleci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
finder:
exclude:
- "tests"
name: "*.php"
not-name:
- "*Stub.php"
- "*Test.php"

enabled:
- concat_with_spaces

disabled:
- concat_without_spaces
47 changes: 47 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
sudo: false
dist: xenial
language: php

php:
- 7.1
- 7.2
- 7.3
- 7.4

env:
matrix:
- UF_BRANCH=4.3.*
- UF_BRANCH=4.4.*
- UF_BRANCH=dev-develop

matrix:
allow_failures:
- UF_BRANCH=dev-develop

cache:
directories:
- $HOME/.composer/cache

before_install:
# clone UserFrosting
- cd ../
- composer create-project userfrosting/userfrosting UserFrosting $UF_BRANCH --no-install
- cd UserFrosting
# move and add sprinkle
- mv ../UF_Breadcrumb app/sprinkles/Breadcrumb/
- echo "{\"base\":[\"core\",\"account\",\"admin\",\"Breadcrumb\"]}" > app/sprinkles.json

before_script:
# install deps and UF
- composer install

script:
# run unit tests
- app/vendor/bin/phpunit -c app/sprinkles/Breadcrumb/phpunit.xml --coverage-clover=app/sprinkles/Breadcrumb/coverage.xml

after_failure:
- cat app/log/userfrosting.log

after_success:
- cd app/sprinkles/Breadcrumb/
- bash <(curl -s https://codecov.io/bash)
14 changes: 13 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
# Change Log

## 2.0.0
## 3.0.0
- Added `Crumbs` object to represent each element.
- Added `addCrumb` & `prependCrumb` method.
- Removed `active` option for each crumb. It's now automatically handled by the Twig template.
- Crumbs title is not optional anymore.
- Update to the base breadcrumb template (removal of first, last element, which is handled by Twig now).
- `BreadcrumbManager` is now `Breadcrumb/manager`.
- Removed `src/Breadcrumb.php` Sprinkle class (not needed anyway).
- Added automated tests.
- Added Travis, PHP-CS-Fixer, PHPStan, Codecov, StyleCI configuration.

## 2.0.1
- Updated Readme instructions
- Fix styling

## 2.0.0
- Updated for UserFrosting v4.1.x
Expand Down
92 changes: 73 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,39 @@
# Breadcrumb Sprinkle for [UserFrosting 4](https://www.userfrosting.com)

[![StyleCI](https://github.styleci.io/repos/70994902/shield?branch=master)](https://github.styleci.io/repos/70994902) [![UserFrosting Version](https://img.shields.io/badge/UserFrosting->=%204.1.16-brightgreen.svg)](https://github.com/userfrosting/UserFrosting) [![Donate](https://img.shields.io/badge/Donate-Buy%20Me%20a%20Coffee-brightgreen.svg)](https://ko-fi.com/A7052ICP)

Breadcrumb services provider for Sprinkle for [UserFrosting 4](https://www.userfrosting.com).
[![Donate][kofi-badge]][kofi]
[![Latest Version][releases-badge]][releases]
[![UserFrosting Version][uf-version]][uf]
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE)
[![Travis][travis-badge]][travis]
[![Codecov][codecov-badge]][codecov]
[![StyleCI][styleci-badge]][styleci]

[kofi]: https://ko-fi.com/A7052ICP
[kofi-badge]: https://img.shields.io/badge/Donate-Buy%20Me%20a%20Coffee-blue.svg
[releases]: https://github.com/lcharette/UF_Breadcrumb/releases
[releases-badge]: https://img.shields.io/github/release/lcharette/UF_Breadcrumb.svg
[uf-version]: https://img.shields.io/badge/UserFrosting->=%204.3-brightgreen.svg
[uf]: https://github.com/userfrosting/UserFrosting
[travis]: https://travis-ci.org/lcharette/UF_Breadcrumb
[travis-badge]: https://travis-ci.org/lcharette/UF_Breadcrumb.svg?branch=master
[codecov]: https://codecov.io/gh/lcharette/UF_Breadcrumb
[codecov-badge]: https://codecov.io/gh/lcharette/UF_Breadcrumb/branch/master/graph/badge.svg
[styleci]: https://styleci.io/repos/70994902
[styleci-badge]: https://styleci.io/repos/70994902/shield?branch=master&style=flat

This Sprinkle provides an helper service and Twig template to manage simple page breadcrumb for [UserFrosting 4](https://www.userfrosting.com).

# Help and Contributing

If you need help using this sprinkle or found any bug, feels free to open an issue or submit a pull request. You can also find me on the [UserFrosting Chat](https://chat.userfrosting.com/) most of the time for direct support.

# Installation
Edit UserFrosting `app/sprinkles.json` file and add the following to the `require` list : `"lcharette/uf_breadcrumb": "^2.0.0"`. Also add `Breadcrumb` to the `base` list. For example:
Edit UserFrosting `app/sprinkles.json` file and add the following to the `require` list : `"lcharette/uf_breadcrumb": "^3.0.0"`. Also add `Breadcrumb` to the `base` list. For example:

```
```json
{
"require": {
"lcharette/uf_breadcrumb": "^2.0.0"
"lcharette/uf_breadcrumb": "^3.0.0"
},
"base": [
"core",
Expand All @@ -29,41 +48,76 @@ Run `composer update` then `php bakery bake` to install the sprinkle.

## Usage

Breadcrumbs hierarchy cannot be autodetected right now. You have to define your hierarchy manually in your controllers. To dynamically add breadcrumbs to the UI, simply use the `add` method of the `breadcrumb` service:
### Adding crumbs
Breadcrumbs hierarchy needs to be manually defined in each controllers. To dynamically add breadcrumbs to the UI, simply use the `add` method of the `breadcrumb` service:

```
// add($name = "", $uri = "", $active = true)
$this->ci->breadcrumb->add("Item name", "path/");
```php
// add($name, $uri = "")
$this->ci->breadcrumb->add('Item name', 'path/');
```

Note that the item name can also be a translation key. Path can be optional if you don't want to provide a link with your breadcrumb.
You can also chain multiple methods :

You can also use the `prepend` method to add a new item to the beginning of the list:
```php
$this->ci->breadcrumb->add("Projects", "projects/")
->add("Project Foo", "projects/foo")
->add("Settings");
```

The crumbs can also be created using the `Crumb` object :

```php
$crumb = new Crumb();
$crumb->setTitle('Item name')->setUri('path/');
$this->ci->breadcrumb->addCrumb($crumb);
```
//prepend($name = "", $uri = "", $active = true)
$this->ci->breadcrumb->prepend("Item name", "path/");

The item name can also be switched for a translation key :
```php
$this->ci->breadcrumb->add(['TRANSLATION_KEY', ['placeholder' => 'Value']], 'path/');

// or

$crumb = new Crumb();
$crumb->setTitle('TRANSLATION_KEY', ['placeholder' => 'Value'])->setUri('path/');
```

Note that the site index is automatically added to the beginning of the list, whether you use `prepend` or not.
Path is actually optional if you don't want to provide a link with your crumb. Alternatively, a route name / route pattern placeholders can also be used :

You can also chain multiple methods :
```php
$this->ci->breadcrumb->add('Item name', ['route_name', ['id' => '123']]);

// or

$crumb = new Crumb();
$crumb->setTitle('Item name')->setRoute('route_name', ['id' => '123']);
```
$this->ci->breadcrumb->add("Projects", "projects/")->add("Project Foo", "projects/foo");

### Prepend crumbs
You can also use the `prepend` method to add a new item to the beginning of the list:

```php
//prepend($name, $uri = "")
$this->ci->breadcrumb->prepend("Item name", "path/");

// or

$this->ci->breadcrumb->prependCrumb($crumb);
```

Note that the site index is automatically added to the beginning of the list, whether you use `prepend` or not.

**If you don't add any custom breadcrumbs, it will fallback to the default UserFrosting behaviour.**

## Custom style

The default UserFrosting layouts and themes will pick up the breadcrumbs automatically. If your UserFrosting theme doesn't include breadcrumbs automatically, simply add this line to your twig files:

```
```html
{% include 'navigation/breadcrumb.html.twig' with {page_title: block('page_title')} %}
```

If you want to edit the style of the breadcrumbs, simply copy the `templates/navigation/breadcrumb.html.twig` file in your own sprinkle and edit according to your styling. No custom assets are included with this sprinkle.

# Licence
By [Louis Charette](https://github.com/lcharette). Copyright (c) 2017, free to use in personal and commercial software as per the MIT license.
By [Louis Charette](https://github.com/lcharette). Copyright (c) 2020, free to use in personal and commercial software as per the MIT license.
2 changes: 2 additions & 0 deletions codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
fixes:
- "app/sprinkles/Breadcrumb/::"
9 changes: 7 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,22 @@
"authors" : [
{
"name": "Louis Charette",
"homepage": "https://github.com/lcharette"
"homepage": "https://bbqsoftwares.com"
}
],
"require": {
"php": ">=5.6"
"php": ">=7.1"
},
"autoload": {
"psr-4": {
"UserFrosting\\Sprinkle\\Breadcrumb\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"UserFrosting\\Sprinkle\\Breadcrumb\\Tests\\": "tests/"
}
},
"extra": {
"installer-name": "Breadcrumb"
}
Expand Down
10 changes: 10 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
parameters:
autoload_files:
- ../../vendor/autoload.php
level: max
treatPhpDocTypesAsCertain: false
ignoreErrors:
# Ignore false positive PHPStan can't understand, until we can fix it
- '#Call to an undefined method Psr\\Container\\ContainerInterface::extend().#'
- '#Access to an undefined property Psr\\Container\\ContainerInterface::\$[a-zA-Z0-9\\_]+.#' # Ignore our CI container
- '#Call to an undefined static method UserFrosting\\Sprinkle\\[a-zA-Z0-9\\_]+\\Facades\\[a-zA-Z0-9\\_\(\):]+.#' # Ignore Facades
Loading

0 comments on commit c6a2964

Please sign in to comment.