ImpressCMS/impresscms

View on GitHub
htdocs/install/class/mainfilemanager.php

Summary

Maintainability
B
4 hrs
Test Coverage

Function doRewrite has a Cognitive Complexity of 18 (exceeds 5 allowed). Consider refactoring.
Open

    function doRewrite() {
        clearstatcache();
        if (! $file = fopen($this->path,"r")) {
            $this->error = true;
            return false;
Severity: Minor
Found in htdocs/install/class/mainfilemanager.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

Method doRewrite has 46 lines of code (exceeds 25 allowed). Consider refactoring.
Open

    function doRewrite() {
        clearstatcache();
        if (! $file = fopen($this->path,"r")) {
            $this->error = true;
            return false;
Severity: Minor
Found in htdocs/install/class/mainfilemanager.php - About 1 hr to fix

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

        function doRewrite() {
            clearstatcache();
            if (! $file = fopen($this->path,"r")) {
                $this->error = true;
                return false;

    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

    Avoid assigning values to variables in if clauses and the like (line '112', column '8').
    Open

        function doRewrite() {
            clearstatcache();
            if (! $file = fopen($this->path,"r")) {
                $this->error = true;
                return false;

    IfStatementAssignment

    Since: 2.7.0

    Assignments in if clauses and the like are considered a code smell. Assignments in PHP return the right operand as their result. In many cases, this is an expected behavior, but can lead to many difficult to spot bugs, especially when the right operand could result in zero, null or an empty string and the like.

    Example

    class Foo
    {
        public function bar($flag)
        {
            if ($foo = 'bar') { // possible typo
                // ...
            }
            if ($baz = 0) { // always false
                // ...
            }
        }
    }

    Source http://phpmd.org/rules/cleancode.html#ifstatementassignment

    The method doRewrite uses an else expression. Else clauses are basically not necessary and you can simplify the code by not using them.
    Open

                } else {
                    $this->error = true;
                    $this->report .= _NGIMG.sprintf(_INSTALL_L122, "<b>$val</b>")."<br />\n";
                }

    ElseExpression

    Since: 1.4.0

    An if expression with an else branch is basically not necessary. You can rewrite the conditions in a way that the else clause is not necessary and the code becomes simpler to read. To achieve this, use early return statements, though you may need to split the code it several smaller methods. For very simple assignments you could also use the ternary operations.

    Example

    class Foo
    {
        public function bar($flag)
        {
            if ($flag) {
                // one branch
            } else {
                // another branch
            }
        }
    }

    Source https://phpmd.org/rules/cleancode.html#elseexpression

    Avoid assigning values to variables in if clauses and the like (line '76', column '9').
    Open

        function doRewrite() {
            clearstatcache();
            if (! $file = fopen($this->path,"r")) {
                $this->error = true;
                return false;

    IfStatementAssignment

    Since: 2.7.0

    Assignments in if clauses and the like are considered a code smell. Assignments in PHP return the right operand as their result. In many cases, this is an expected behavior, but can lead to many difficult to spot bugs, especially when the right operand could result in zero, null or an empty string and the like.

    Example

    class Foo
    {
        public function bar($flag)
        {
            if ($foo = 'bar') { // possible typo
                // ...
            }
            if ($baz = 0) { // always false
                // ...
            }
        }
    }

    Source http://phpmd.org/rules/cleancode.html#ifstatementassignment

    Reference to undeclared constant \_OKIMG
    Open

                        $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Reference to undeclared constant \_INSTALL_L121
    Open

                    $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Reference to undeclared constant \_OKIMG
    Open

                    $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Argument 1 (str) is int but \addslashes() takes string
    Open

                    , "define('".$key."', '". str_replace( '$', '\$', addslashes( $val ) ) ."')"

    Reference to undeclared constant \_INSTALL_L121
    Open

                        $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Argument 2 (replace) is int but \preg_replace() takes array|string
    Open

                        $content = preg_replace("/(define\()([\"'])(".$key.")\\2,\s*([0-9]+)\s*\)/", $val, $content);

    Reference to undeclared constant \_NGIMG
    Open

                    $this->report .= _NGIMG.sprintf(_INSTALL_L122, "<b>$val</b>")."<br />\n";

    Argument 2 (replace) is int but \preg_replace() takes array|string
    Open

                        $content = preg_replace("/(define\()([\"'])(".$key.")\\2,\s*([\"'])(.*?)\\4\s*\)/", $val, $content);

    Reference to undeclared constant \_INSTALL_L125
    Open

            $this->report .= _OKIMG.sprintf(_INSTALL_L125, "<b>".$this->path."</b>", "<b>".$this->distfile."</b>")."<br />\n";

    Reference to undeclared constant \_INSTALL_L121
    Open

                    $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Reference to undeclared constant \_INSTALL_L121
    Open

                        $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Reference to undeclared constant \_INSTALL_L126
    Open

                $this->report .= _NGIMG.sprintf(_INSTALL_L126, "<b>".$this->path."</b>")."<br />\n";

    Reference to undeclared constant \_OKIMG
    Open

            $this->report .= _OKIMG.sprintf(_INSTALL_L125, "<b>".$this->path."</b>", "<b>".$this->distfile."</b>")."<br />\n";

    Reference to undeclared constant \_OKIMG
    Open

                        $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Reference to undeclared constant \_INSTALL_L122
    Open

                    $this->report .= _NGIMG.sprintf(_INSTALL_L122, "<b>$val</b>")."<br />\n";

    Reference to undeclared constant \_NGIMG
    Open

                $this->report .= _NGIMG.sprintf(_INSTALL_L126, "<b>".$this->path."</b>")."<br />\n";

    Reference to undeclared constant \_OKIMG
    Open

                    $this->report .= _OKIMG.sprintf(_INSTALL_L121, "<b>$key</b>", $val)."<br />\n";

    Each class must be in a namespace of at least one level (a top-level vendor name)
    Open

    class mainfile_manager {

    The class mainfile_manager is not named in CamelCase.
    Open

    class mainfile_manager {
    
        var $path = '../mainfile.php';
        var $distfile = './templates/mainfile.dist.php';
        var $rewrite = array();

    CamelCaseClassName

    Since: 0.2

    It is considered best practice to use the CamelCase notation to name classes.

    Example

    class class_name {
    }

    Source

    Space found before comma in function call
    Open

                    , $content);

    Expected "function abc(...)"; found "function abc(...)"
    Open

        function  __construct() {

    Space found before comma in function call
    Open

                    , "define('".$key."', '". str_replace( '$', '\$', addslashes( $val ) ) ."')"

    Visibility must be declared on method "report"
    Open

        function report() {

    Visibility must be declared on property "$distfile"
    Open

        var $distfile = './templates/mainfile.dist.php';

    Expected 1 space after FUNCTION keyword; 2 found
    Open

        function  __construct() {

    Visibility must be declared on method "doRewrite"
    Open

        function doRewrite() {

    The var keyword must not be used to declare a property
    Open

        var $rewrite = array();

    The var keyword must not be used to declare a property
    Open

        var $distfile = './templates/mainfile.dist.php';

    Space found before comma in function call
    Open

                    , "define('".$key."', ".$val.")"

    The var keyword must not be used to declare a property
    Open

        var $error = false;

    Visibility must be declared on method "__construct"
    Open

        function  __construct() {

    Space found before comma in function call
    Open

                    , $content);

    Visibility must be declared on method "error"
    Open

        function error() {

    Visibility must be declared on property "$report"
    Open

        var $report = '';

    Visibility must be declared on property "$rewrite"
    Open

        var $rewrite = array();

    Visibility must be declared on property "$error"
    Open

        var $error = false;

    Visibility must be declared on method "copyDistFile"
    Open

        function copyDistFile() {

    The var keyword must not be used to declare a property
    Open

        var $report = '';

    Visibility must be declared on property "$path"
    Open

        var $path = '../mainfile.php';

    The var keyword must not be used to declare a property
    Open

        var $path = '../mainfile.php';

    Visibility must be declared on method "setRewrite"
    Open

        function setRewrite($def, $val) {

    No space found after comma in function call
    Open

                preg_match("/(define\()([\"'])(".$key.")\\2,\s*([0-9]+)\s*\)/",$content)) {

    No space found after comma in function call
    Open

                elseif (preg_match("/(define\()([\"'])(".$key.")\\2,\s*([\"'])(.*?)\\4\s*\)/",$content)) {

    Space after opening parenthesis of function call prohibited
    Open

                    , "define('".$key."', '". str_replace( '$', '\$', addslashes( $val ) ) ."')"

    No space found after comma in function call
    Open

            if (! $file = fopen($this->path,"r")) {

    Class name "mainfile_manager" is not in camel caps format
    Open

    class mainfile_manager {

    Expected 1 space after closing brace; newline found
    Open

                }

    No space found after comma in function call
    Open

            if (fwrite($file,$content) == -1) {

    Expected 0 spaces before closing bracket; 1 found
    Open

                    , "define('".$key."', '". str_replace( '$', '\$', addslashes( $val ) ) ."')"

    Expected 0 spaces before closing bracket; 1 found
    Open

                    , "define('".$key."', '". str_replace( '$', '\$', addslashes( $val ) ) ."')"

    Space after opening parenthesis of function call prohibited
    Open

                    , "define('".$key."', '". str_replace( '$', '\$', addslashes( $val ) ) ."')"

    No space found after comma in function call
    Open

            if (!$file = fopen($this->path,"w")) {

    Expected 0 spaces before closing bracket; 1 found
    Open

            $content = fread($file, filesize($this->path) );

    There are no issues that match your filters.

    Category
    Status