lovata/oc-toolbox-plugin

View on GitHub
classes/item/ElementItem.php

Summary

Maintainability
D
1 day
Test Coverage

ElementItem has 31 functions (exceeds 20 allowed). Consider refactoring.
Open

abstract class ElementItem extends MainItem
{
    use ExtendableTrait;

    const MODEL_CLASS = Model::class;
Severity: Minor
Found in classes/item/ElementItem.php - About 3 hrs to fix

    File ElementItem.php has 307 lines of code (exceeds 250 allowed). Consider refactoring.
    Open

    <?php namespace Lovata\Toolbox\Classes\Item;
    
    use Model;
    use October\Rain\Extension\ExtendableTrait;
    
    
    Severity: Minor
    Found in classes/item/ElementItem.php - About 3 hrs to fix

      The class ElementItem has an overall complexity of 88 which is very high. The configured complexity threshold is 50.
      Open

      abstract class ElementItem extends MainItem
      {
          use ExtendableTrait;
      
          const MODEL_CLASS = Model::class;
      Severity: Minor
      Found in classes/item/ElementItem.php by phpmd

      The class ElementItem has 17 public methods. Consider refactoring ElementItem to keep number of public methods under 10.
      Open

      abstract class ElementItem extends MainItem
      {
          use ExtendableTrait;
      
          const MODEL_CLASS = Model::class;
      Severity: Minor
      Found in classes/item/ElementItem.php by phpmd

      TooManyPublicMethods

      Since: 0.1

      A class with too many public methods is probably a good suspect for refactoring, in order to reduce its complexity and find a way to have more fine grained objects.

      By default it ignores methods starting with 'get' or 'set'.

      Example

      Source https://phpmd.org/rules/codesize.html#toomanypublicmethods

      Function setLangProperties has a Cognitive Complexity of 17 (exceeds 5 allowed). Consider refactoring.
      Open

          private function setLangProperties()
          {
              if (empty($this->obElement) || !$this->obElement->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
                  return;
              }
      Severity: Minor
      Found in classes/item/ElementItem.php - About 2 hrs to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function setCachedFieldList has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
      Open

          protected function setCachedFieldList()
          {
              if (!$this->obElement->methodExists('getCachedField')) {
                  return;
              }
      Severity: Minor
      Found in classes/item/ElementItem.php - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Method setLangProperties has 26 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          private function setLangProperties()
          {
              if (empty($this->obElement) || !$this->obElement->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
                  return;
              }
      Severity: Minor
      Found in classes/item/ElementItem.php - About 1 hr to fix

        Function getUploadFileData has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
        Open

            private function getUploadFileData($obFile) : array
            {
                if (empty($obFile)) {
                    return [];
                }
        Severity: Minor
        Found in classes/item/ElementItem.php - About 45 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function setExtendData has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
        Open

            protected function setExtendData()
            {
                //Check extend result methods
                if (empty($this->arExtendResult)) {
                    return;
        Severity: Minor
        Found in classes/item/ElementItem.php - About 25 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function setData has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
        Open

            protected function setData()
            {
                $this->initElementObject();
                if (empty($this->obElement)) {
                    return;
        Severity: Minor
        Found in classes/item/ElementItem.php - About 25 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        The method setLangProperties() has an NPath complexity of 1170. The configured NPath complexity threshold is 200.
        Open

            private function setLangProperties()
            {
                if (empty($this->obElement) || !$this->obElement->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
                    return;
                }
        Severity: Minor
        Found in classes/item/ElementItem.php by phpmd

        NPathComplexity

        Since: 0.1

        The NPath complexity of a method is the number of acyclic execution paths through that method. A threshold of 200 is generally considered the point where measures should be taken to reduce complexity.

        Example

        class Foo {
            function bar() {
                // lots of complicated code
            }
        }

        Source https://phpmd.org/rules/codesize.html#npathcomplexity

        The method setLangProperties() has a Cyclomatic Complexity of 15. The configured cyclomatic complexity threshold is 10.
        Open

            private function setLangProperties()
            {
                if (empty($this->obElement) || !$this->obElement->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
                    return;
                }
        Severity: Minor
        Found in classes/item/ElementItem.php by phpmd

        CyclomaticComplexity

        Since: 0.1

        Complexity is determined by the number of decision points in a method plus one for the method entry. The decision points are 'if', 'while', 'for', and 'case labels'. Generally, 1-4 is low complexity, 5-7 indicates moderate complexity, 8-10 is high complexity, and 11+ is very high complexity.

        Example

        // Cyclomatic Complexity = 11
        class Foo {
        1   public function example() {
        2       if ($a == $b) {
        3           if ($a1 == $b1) {
                        fiddle();
        4           } elseif ($a2 == $b2) {
                        fiddle();
                    } else {
                        fiddle();
                    }
        5       } elseif ($c == $d) {
        6           while ($c == $d) {
                        fiddle();
                    }
        7        } elseif ($e == $f) {
        8           for ($n = 0; $n < $h; $n++) {
                        fiddle();
                    }
                } else {
                    switch ($z) {
        9               case 1:
                            fiddle();
                            break;
        10              case 2:
                            fiddle();
                            break;
        11              case 3:
                            fiddle();
                            break;
                        default:
                            fiddle();
                            break;
                    }
                }
            }
        }

        Source https://phpmd.org/rules/codesize.html#cyclomaticcomplexity

        Class "ElementItem" has 31 methods, which is greater than 20 authorized. Split it into smaller classes.
        Open

        abstract class ElementItem extends MainItem
        Severity: Major
        Found in classes/item/ElementItem.php by sonar-php

        A class that grows too much tends to aggregate too many responsibilities and inevitably becomes harder to understand and therefore to maintain. Above a specific threshold, it is strongly advised to refactor the class into smaller ones which focus on well defined topics.

        Refactor this function to reduce its Cognitive Complexity from 17 to the 15 allowed.
        Open

            private function setLangProperties()
        Severity: Critical
        Found in classes/item/ElementItem.php by sonar-php

        Cognitive Complexity is a measure of how hard the control flow of a function is to understand. Functions with high Cognitive Complexity will be difficult to maintain.

        See

        Define a constant instead of duplicating this literal "RainLab.Translate.Behaviors.TranslatableModel" 4 times.
        Open

                if (self::$bLangInit && !empty(self::$sDefaultLang) && $this->obElement->isClassExtendedWith('RainLab.Translate.Behaviors.TranslatableModel')) {
        Severity: Critical
        Found in classes/item/ElementItem.php by sonar-php

        Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

        On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

        Noncompliant Code Example

        With the default threshold of 3:

        function run() {
          prepare('action1');                              // Non-Compliant - 'action1' is duplicated 3 times
          execute('action1');
          release('action1');
        }
        

        Compliant Solution

        ACTION_1 = 'action1';
        
        function run() {
          prepare(ACTION_1);
          execute(ACTION_1);
          release(ACTION_1);
        }
        

        Exceptions

        To prevent generating some false-positives, literals having less than 5 characters are excluded.

        Define a constant instead of duplicating this literal "iElementID" 4 times.
        Open

                return ['iElementID'];
        Severity: Critical
        Found in classes/item/ElementItem.php by sonar-php

        Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

        On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

        Noncompliant Code Example

        With the default threshold of 3:

        function run() {
          prepare('action1');                              // Non-Compliant - 'action1' is duplicated 3 times
          execute('action1');
          release('action1');
        }
        

        Compliant Solution

        ACTION_1 = 'action1';
        
        function run() {
          prepare(ACTION_1);
          execute(ACTION_1);
          release(ACTION_1);
        }
        

        Exceptions

        To prevent generating some false-positives, literals having less than 5 characters are excluded.

        Define a constant instead of duplicating this literal "obElement" 3 times.
        Open

                    'obElement'  => $obElement,
        Severity: Critical
        Found in classes/item/ElementItem.php by sonar-php

        Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

        On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

        Noncompliant Code Example

        With the default threshold of 3:

        function run() {
          prepare('action1');                              // Non-Compliant - 'action1' is duplicated 3 times
          execute('action1');
          release('action1');
        }
        

        Compliant Solution

        ACTION_1 = 'action1';
        
        function run() {
          prepare(ACTION_1);
          execute(ACTION_1);
          release(ACTION_1);
        }
        

        Exceptions

        To prevent generating some false-positives, literals having less than 5 characters are excluded.

        Abstract class name is not prefixed with "Abstract"
        Wontfix

        abstract class ElementItem extends MainItem
        Severity: Minor
        Found in classes/item/ElementItem.php by phpcodesniffer

        There are no issues that match your filters.

        Category
        Status