diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 532c34a42..dd9be6be6 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -6,36 +6,215 @@ ->setUsingCache(true) ->setRiskyAllowed(true) ->setRules([ - '@Symfony' => true, + 'align_multiline_comment' => true, 'array_indentation' => true, - 'cast_spaces' => [ - 'space' => 'single', - ], + 'array_syntax' => ['syntax' => 'short'], + 'backtick_to_shell_exec' => true, + 'binary_operator_spaces' => true, + 'blank_line_after_namespace' => true, + 'blank_line_after_opening_tag' => true, + 'blank_line_before_statement' => true, + 'braces' => true, + 'cast_spaces' => true, + 'class_attributes_separation' => ['elements' => ['method' => 'one', 'property' => 'one']], // const are often grouped with other related const + 'class_definition' => false, + 'class_keyword_remove' => false, // ::class keyword gives us better support in IDE 'combine_consecutive_issets' => true, - 'concat_space' => [ - 'spacing' => 'one', - ], - 'error_suppression' => [ - 'mute_deprecation_error' => false, - 'noise_remaining_usages' => false, - 'noise_remaining_usages_exclude' => [], - ], - 'function_to_constant' => false, + 'combine_consecutive_unsets' => true, + 'combine_nested_dirname' => true, + 'comment_to_phpdoc' => false, // interferes with annotations + 'compact_nullable_typehint' => true, + 'concat_space' => ['spacing' => 'one'], + 'constant_case' => true, + 'date_time_immutable' => false, // Break our unit tests + 'declare_equal_normalize' => true, + 'declare_strict_types' => false, // Too early to adopt strict types + 'dir_constant' => true, + 'doctrine_annotation_array_assignment' => true, + 'doctrine_annotation_braces' => true, + 'doctrine_annotation_indentation' => true, + 'doctrine_annotation_spaces' => true, + 'elseif' => true, + 'encoding' => true, + 'ereg_to_preg' => true, + 'escape_implicit_backslashes' => true, + 'explicit_indirect_variable' => false, // I feel it makes the code actually harder to read + 'explicit_string_variable' => false, // I feel it makes the code actually harder to read + 'final_class' => false, // We need non-final classes + 'final_internal_class' => true, + 'final_public_method_for_abstract_class' => false, // We need non-final methods + 'fopen_flag_order' => true, + 'fopen_flags' => true, + 'full_opening_tag' => true, + 'fully_qualified_strict_types' => true, + 'function_declaration' => true, + 'function_to_constant' => true, + 'function_typehint_space' => true, + 'general_phpdoc_annotation_remove' => ['annotations' => ['access', 'category', 'copyright', 'throws']], + 'global_namespace_import' => true, + 'header_comment' => false, // We don't use common header in all our files + 'heredoc_indentation' => false, // Requires PHP >= 7.3 + 'heredoc_to_nowdoc' => false, // Not sure about this one + 'implode_call' => true, + 'include' => true, + 'increment_style' => true, + 'indentation_type' => true, + 'is_null' => true, + 'line_ending' => true, + 'linebreak_after_opening_tag' => true, + 'list_syntax' => ['syntax' => 'short'], + 'logical_operators' => true, + 'lowercase_cast' => true, + 'lowercase_keywords' => true, + 'lowercase_static_reference' => true, + 'magic_constant_casing' => true, + 'magic_method_casing' => true, + 'mb_str_functions' => false, // No, too dangerous to change that + 'method_argument_space' => true, 'method_chaining_indentation' => true, - 'no_alias_functions' => false, - 'no_superfluous_phpdoc_tags' => false, - 'non_printable_character' => [ - 'use_escape_sequences_in_strings' => true, - ], - 'phpdoc_align' => [ - 'align' => 'left', - ], - 'phpdoc_summary' => false, - 'protected_to_private' => false, - 'self_accessor' => false, + 'modernize_types_casting' => true, + 'multiline_comment_opening_closing' => true, + 'multiline_whitespace_before_semicolons' => true, + 'native_constant_invocation' => false, // Micro optimization that look messy + 'native_function_casing' => true, + 'native_function_invocation' => false, // I suppose this would be best, but I am still unconvinced about the visual aspect of it + 'native_function_type_declaration_casing' => true, + 'new_with_braces' => true, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_binary_string' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => false, // we want 1 blank line before namespace + 'no_break_comment' => true, + 'no_closing_tag' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_homoglyph_names' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => true, + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_null_property_initialization' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'echo_tag_syntax' => ['format' => 'long'], + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_around_offset' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_superfluous_elseif' => false, // Might be risky on a huge code base + 'no_superfluous_phpdoc_tags' => ['allow_mixed' => 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_unneeded_curly_braces' => true, + 'no_unneeded_final_method' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unset_cast' => true, + 'no_unset_on_property' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'non_printable_character' => true, + 'normalize_index_brace' => true, + 'not_operator_with_space' => false, // No we prefer to keep '!' without spaces + 'not_operator_with_successor_space' => false, // idem + 'nullable_type_declaration_for_default_null_value' => true, + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => false, // We prefer to keep some freedom + 'ordered_imports' => true, + 'ordered_interfaces' => true, + 'php_unit_construct' => true, + 'php_unit_dedicate_assert' => true, + 'php_unit_dedicate_assert_internal_type' => true, + 'php_unit_expectation' => true, + 'php_unit_fqcn_annotation' => true, + 'php_unit_internal_class' => false, // Because tests are excluded from package + 'php_unit_method_casing' => true, + 'php_unit_mock' => true, + 'php_unit_mock_short_will_return' => true, + 'php_unit_namespaced' => true, + 'php_unit_no_expectation_annotation' => true, + 'phpdoc_order_by_value' => ['annotations' => ['covers']], + 'php_unit_set_up_tear_down_visibility' => true, + 'php_unit_size_class' => false, // That seems extra work to maintain for little benefits + 'php_unit_strict' => false, // We sometime actually need assertEquals + 'php_unit_test_annotation' => true, + 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], + 'php_unit_test_class_requires_covers' => false, // We don't care as much as we should about coverage + 'phpdoc_add_missing_param_annotation' => false, // Don't add things that bring no value + 'phpdoc_align' => false, // Waste of time + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + //'phpdoc_inline_tag' => true, + 'phpdoc_line_span' => false, // Unfortunately our old comments turn even uglier with this + 'phpdoc_no_access' => true, + 'phpdoc_no_alias_tag' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_no_useless_inheritdoc' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_summary' => true, + 'phpdoc_to_comment' => false, // interferes with annotations + 'phpdoc_to_param_type' => false, // Because experimental, but interesting for one shot use + 'phpdoc_to_return_type' => false, // idem + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => true, + 'phpdoc_types_order' => true, + 'phpdoc_var_annotation_correct_order' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, + 'protected_to_private' => true, + 'psr_autoloading' => true, + 'random_api_migration' => true, + 'return_assignment' => false, // Sometimes useful for clarity or debug + 'return_type_declaration' => true, + 'self_accessor' => true, + 'self_static_accessor' => true, + 'semicolon_after_instruction' => false, // Buggy in `samples/index.php` + 'set_type_to_cast' => true, + 'short_scalar_cast' => true, + 'simple_to_complex_string_variable' => false, // Would differ from TypeScript without obvious advantages + 'simplified_null_return' => false, // Even if technically correct we prefer to be explicit + '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_line_comment_style' => true, + 'single_line_throw' => false, // I don't see any reason for having a special case for Exception + 'single_quote' => true, + 'single_trait_insert_per_statement' => true, + 'space_after_semicolon' => true, + 'standardize_increment' => true, + 'standardize_not_equals' => true, + 'static_lambda' => false, // Risky if we can't guarantee nobody use `bindTo()` + 'strict_comparison' => false, // No, too dangerous to change that + 'strict_param' => false, // No, too dangerous to change that + 'string_line_ending' => true, + 'switch_case_semicolon_to_colon' => true, + 'switch_case_space' => true, + 'ternary_operator_spaces' => true, + 'ternary_to_null_coalescing' => true, + 'trailing_comma_in_multiline' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => ['elements' => ['property', 'method']], // not const + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, 'yoda_style' => false, - 'single_line_throw' => false, - 'no_alias_language_construct_call' => false, ]) ->getFinder() ->in(__DIR__) diff --git a/docs/changes/1.1.0.md b/docs/changes/1.1.0.md index 47613d194..f92efb567 100644 --- a/docs/changes/1.1.0.md +++ b/docs/changes/1.1.0.md @@ -1,11 +1,15 @@ -# 1.0.0 - WIP +# 1.1.0 - WIP ## Features -- Support for axis options - [@mindline](https://github.com/mindline-analytics) GH-676 +- Support for axis options - [@mindline](https://github.com/mindline-analytics) in [#676](https://github.com/PHPOffice/PHPPresentatio /pull/676) - Axis intersection point (axis crossing) through `setCrossesAt`/ `getCrossesAt` - Reverse axis order through `setIsReversedOrder`/ `isReversedOrder` - PowerPoint2007 Writer -- Support for Hyperlink Text Color - [@MartynasJanu](https://github.com/MartynasJanu) & [@Progi1984](https://github.com/Progi1984) GH-682 +- Support for Hyperlink Text Color - [@MartynasJanu](https://github.com/MartynasJanu) & [@Progi1984](https://github.com/Progi1984) in [#682](https://github.com/PHPOffice/PHPPresentatio /pull/682) - PowerPoint2007 Reader - PowerPoint2007 Writer + +## Bugfixes + +- Fixed CI - [@Progi1984](https://github.com/Progi1984) in [#766](https://github.com/PHPOffice/PHPPresentatio /pull/766) \ No newline at end of file diff --git a/samples/Sample_03_Image.php b/samples/Sample_03_Image.php index 8c6e0e847..888c5ba97 100644 --- a/samples/Sample_03_Image.php +++ b/samples/Sample_03_Image.php @@ -17,7 +17,7 @@ // Generate an image echo date('H:i:s') . ' Generate an image' . EOL; -$gdImage = @imagecreatetruecolor(140, 20) or exit('Cannot Initialize new GD image stream'); +$gdImage = imagecreatetruecolor(140, 20); $textColor = imagecolorallocate($gdImage, 255, 255, 255); imagestring($gdImage, 1, 5, 5, 'Created with PHPPresentation', $textColor); diff --git a/samples/Sample_05_Chart.php b/samples/Sample_05_Chart.php index 9169b1f43..201d9a46a 100644 --- a/samples/Sample_05_Chart.php +++ b/samples/Sample_05_Chart.php @@ -21,7 +21,7 @@ use PhpOffice\PhpPresentation\Style\Fill; use PhpOffice\PhpPresentation\Style\Shadow; -function fnSlide_Area(PhpPresentation $objPHPPresentation) +function fnSlide_Area(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -71,7 +71,7 @@ function fnSlide_Area(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_Bar(PhpPresentation $objPHPPresentation) +function fnSlide_Bar(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -125,7 +125,7 @@ function fnSlide_Bar(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_BarHorizontal(PhpPresentation $objPHPPresentation) +function fnSlide_BarHorizontal(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -161,7 +161,7 @@ function fnSlide_BarHorizontal(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_BarStacked(PhpPresentation $objPHPPresentation) +function fnSlide_BarStacked(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -223,7 +223,7 @@ function fnSlide_BarStacked(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_BarPercentStacked(PhpPresentation $objPHPPresentation) +function fnSlide_BarPercentStacked(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -302,7 +302,7 @@ function fnSlide_BarPercentStacked(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_Bar3D(PhpPresentation $objPHPPresentation) +function fnSlide_Bar3D(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -356,7 +356,7 @@ function fnSlide_Bar3D(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_Bar3DHorizontal(PhpPresentation $objPHPPresentation) +function fnSlide_Bar3DHorizontal(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -395,7 +395,7 @@ function fnSlide_Bar3DHorizontal(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_Doughnut(PhpPresentation $objPHPPresentation) +function fnSlide_Doughnut(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -450,7 +450,7 @@ function fnSlide_Doughnut(PhpPresentation $objPHPPresentation) $shape->getLegend()->setPosition(Legend::POSITION_LEFT); } -function fnSlide_Pie3D(PhpPresentation $objPHPPresentation) +function fnSlide_Pie3D(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -499,7 +499,7 @@ function fnSlide_Pie3D(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_Pie(PhpPresentation $objPHPPresentation) +function fnSlide_Pie(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -550,7 +550,7 @@ function fnSlide_Pie(PhpPresentation $objPHPPresentation) $shape->getLegend()->getFont()->setItalic(true); } -function fnSlide_Radar(PhpPresentation $objPHPPresentation) +function fnSlide_Radar(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; @@ -607,7 +607,7 @@ function fnSlide_Radar(PhpPresentation $objPHPPresentation) ->setStartColor(new Color(Color::COLOR_BLUE)); // 0000FF } -function fnSlide_Scatter(PhpPresentation $objPHPPresentation) +function fnSlide_Scatter(PhpPresentation $objPHPPresentation): void { global $oFill; global $oShadow; diff --git a/samples/Sample_06_Fill.php b/samples/Sample_06_Fill.php index e917a34f9..41bc149a6 100644 --- a/samples/Sample_06_Fill.php +++ b/samples/Sample_06_Fill.php @@ -46,15 +46,19 @@ switch ($inc) { case 1: $shape->getFill()->setFillType(Fill::FILL_NONE); + break; case 2: $shape->getFill()->setFillType(Fill::FILL_GRADIENT_LINEAR)->setRotation(90)->setStartColor(new Color('FF4672A8'))->setEndColor(new Color('FF000000')); + break; case 3: $shape->getFill()->setFillType(Fill::FILL_GRADIENT_PATH)->setRotation(90)->setStartColor(new Color('FF4672A8'))->setEndColor(new Color('FF000000')); + break; case 4: $shape->getFill()->setFillType(Fill::FILL_SOLID)->setRotation(90)->setStartColor(new Color('FF4672A8'))->setEndColor(new Color('FF4672A8')); + break; } diff --git a/samples/Sample_07_Border.php b/samples/Sample_07_Border.php index 24816fedd..fff1aa1bb 100644 --- a/samples/Sample_07_Border.php +++ b/samples/Sample_07_Border.php @@ -38,15 +38,19 @@ switch ($inc) { case 1: $shape->getBorder()->setColor(new Color('FF4672A8'))->setDashStyle(Border::DASH_SOLID)->setLineStyle(Border::LINE_DOUBLE); + break; case 2: $shape->getBorder()->setColor(new Color('FF4672A8'))->setDashStyle(Border::DASH_DASH)->setLineStyle(Border::LINE_SINGLE); + break; case 3: $shape->getBorder()->setColor(new Color('FF4672A8'))->setDashStyle(Border::DASH_DOT)->setLineStyle(Border::LINE_THICKTHIN); + break; case 4: $shape->getBorder()->setColor(new Color('FF4672A8'))->setDashStyle(Border::DASH_LARGEDASHDOT)->setLineStyle(Border::LINE_THINTHICK); + break; } diff --git a/samples/Sample_11_Shape.php b/samples/Sample_11_Shape.php index 37dc5a221..af3059f2b 100644 --- a/samples/Sample_11_Shape.php +++ b/samples/Sample_11_Shape.php @@ -7,7 +7,7 @@ include_once 'Sample_Header.php'; -function fnSlideRichText(PhpPresentation $objPHPPresentation) +function fnSlideRichText(PhpPresentation $objPHPPresentation): void { // Create templated slide echo date('H:i:s') . ' Create templated slide' . EOL; @@ -35,7 +35,7 @@ function fnSlideRichText(PhpPresentation $objPHPPresentation) $textRun->getFont()->setColor(new Color('FF000000')); } -function fnSlideRichTextLineSpacing(PhpPresentation $objPHPPresentation) +function fnSlideRichTextLineSpacing(PhpPresentation $objPHPPresentation): void { // Create templated slide echo date('H:i:s') . ' Create templated slide' . EOL; @@ -81,7 +81,7 @@ function fnSlideRichTextLineSpacing(PhpPresentation $objPHPPresentation) $shape->createTextRun('Line Spacing 300'); } -function fnSlideRichTextShadow(PhpPresentation $objPHPPresentation) +function fnSlideRichTextShadow(PhpPresentation $objPHPPresentation): void { // Create templated slide echo date('H:i:s') . ' Create templated slide' . EOL; @@ -101,7 +101,7 @@ function fnSlideRichTextShadow(PhpPresentation $objPHPPresentation) $textRun->getFont()->setColor(new Color('FF000000')); } -function fnSlideRichTextList(PhpPresentation $objPHPPresentation) +function fnSlideRichTextList(PhpPresentation $objPHPPresentation): void { // Create templated slide echo date('H:i:s') . ' Create templated slide' . EOL; diff --git a/samples/Sample_15_Background.php b/samples/Sample_15_Background.php index 74135eece..9e1280fd9 100644 --- a/samples/Sample_15_Background.php +++ b/samples/Sample_15_Background.php @@ -29,9 +29,7 @@ $oSlide2->addShape(clone $oShapeRichText); // Slide > Background > Image -/* - * @link : http://publicdomainarchive.com/public-domain-images-cave-red-rocks-light-beam-cavern/ - */ +// @link : http://publicdomainarchive.com/public-domain-images-cave-red-rocks-light-beam-cavern/ $oBkgImage = new Image(); $oBkgImage->setPath(__DIR__ . '/resources/background.jpg'); $oSlide2->setBackground($oBkgImage); diff --git a/samples/Sample_Header.php b/samples/Sample_Header.php index eb16a62a3..0ed440b98 100644 --- a/samples/Sample_Header.php +++ b/samples/Sample_Header.php @@ -1,7 +1,7 @@ $extension) { $result .= date('H:i:s') . " Write to {$writer} format"; - if (!is_null($extension)) { + if (null !== $extension) { $xmlWriter = IOFactory::createWriter($phpPresentation, $writer); $xmlWriter->save(__DIR__ . "/{$filename}.{$extension}"); rename(__DIR__ . "/{$filename}.{$extension}", __DIR__ . "/results/{$filename}.{$extension}"); @@ -158,7 +158,7 @@ function getEndingNotes($writers) $result .= '

 

'; $result .= '

Results: '; foreach ($types as $type) { - if (!is_null($type)) { + if (null !== $type) { $resultFile = 'results/' . SCRIPT_FILENAME . '.' . $type; if (file_exists($resultFile)) { $result .= "{$type} "; @@ -174,12 +174,8 @@ function getEndingNotes($writers) /** * Creates a templated slide. - * - * @param PHPPresentation $objPHPPresentation - * - * @return \PhpOffice\PhpPresentation\Slide */ -function createTemplatedSlide(PhpOffice\PhpPresentation\PhpPresentation $objPHPPresentation) +function createTemplatedSlide(PHPPresentation $objPHPPresentation): Slide { // Create slide $slide = $objPHPPresentation->createSlide(); @@ -200,9 +196,10 @@ function createTemplatedSlide(PhpOffice\PhpPresentation\PhpPresentation $objPHPP return $slide; } -class PhpPptTree +class Sample_Header { protected $oPhpPresentation; + protected $htmlOutput; public function __construct(PhpPresentation $oPHPPpt) @@ -230,12 +227,12 @@ public function display() return $this->htmlOutput; } - protected function append($sHTML) + protected function append($sHTML): void { $this->htmlOutput .= $sHTML; } - protected function displayPhpPresentation(PhpPresentation $oPHPPpt) + protected function displayPhpPresentation(PhpPresentation $oPHPPpt): void { $this->append('

  • PhpPresentation'); $this->append('