tobiaskluge / phpsitemapng

phpSitemapNG php based google sitemaps generator
GNU General Public License v3.0
16 stars 13 forks source link

Documentation missing / Error on startup #1

Closed skyynet closed 2 years ago

skyynet commented 6 years ago

At least some documentation would be fine. Just installing on APACHE with PHP 7.2 gives me:

PHP Fatal error: Uncaught Error: [] operator not supported for strings in /inc/classes/LayoutEngine.class.php:59 Stack trace:

0 /inc/functions/functions.inc.php(99): LayoutEngine->addContentFooter('<div align="cen...')

1 /inc/startup.php(54): init()

2 /index.php(10): require_once('/...')

3 {main}

thrown in /inc/classes/LayoutEngine.class.php on line 59 [20-Mar-2018 22:13:36 Europe/Berlin] PHP Fatal error: Uncaught Error: [] operator not supported for strings in /inc/classes/LayoutEngine.class.php:59 Stack trace:

0 /inc/functions/functions.inc.php(99): LayoutEngine->addContentFooter('<div align="cen...')

1 /inc/startup.php(54): init()

2 /index.php(10): require_once('/...')

3 {main}

thrown in /inc/classes/LayoutEngine.class.php on line 59

faospark commented 6 years ago

i got it to load by removing the extra operator [] on line 59

sparcbr commented 6 years ago

Those attributes are being initialized with "" , which is a string, hance the error. I fixed by changing those "" into array() like:

        $this->content['content_header'] = array();
        $this->content['content_footer'] = array();

Also, now we don't need those 'if's before the 'foreach's anymore. For example, the code:

if(($this->content['content_footer'] != "") && count($this->content['content_footer']) > 0) {       
    foreach ($this->content['content_footer'] as $id => $line) {
         $res .= '<div class="content_footer">'.$line.'</div>'. "\n";
    }
}

turns to:

foreach ($this->content['content_footer'] as $id => $line) {
    $res .= '<div class="content_footer">'.$line.'</div>'. "\n";
}

Here is the whole file after my modifications:

<?php
/* 
    This is phpSitemapNG, a php script that creates your personal google sitemap
    It can be downloaded under http://enarion.net/google/
    License: GPL

    Tobias Kluge, enarion.net
*/
/**
 * this class gets all messages from the application and
 * creates a html output as result of getContent()
 */
class LayoutEngine {
    var $content = array();
    var $buffering = true;
    var $static_title = "";

    function LayoutEngine($staticTitle) {
/*      $this->content[error] = array();
        $this->content[warning] = array();
        $this->content[info] = array();
        $this->content[success] = array();
        $this->content[text] = array();
        $this->content[debug][] = array();
*/      $this->content['content_header'] = array();
        $this->content['content_footer'] = array();
        $this->content['title'] = "";
        $this->content['charset'] = "";
        $this->content['header'] = array();
        $this->content['css'] = array();
        $this->content['body'] = array();
        $this->static_title = $staticTitle;
    }

    function addHeader($header) {
        $this->content['header'][] = $header;
    }
    function switchOffBuffer() {
        $this->buffering = false;
    }

    function addCss($msg) {
        $this->content['css'][] = $msg;
    }

    function addContentHeader($msg) {
        $tmp = '<div class="content_header">'.$msg.'</div>'. "\n";

        if ($this->buffering) {
            $this->content['content_header'][] = $tmp;
        } else {
            print $tmp;
        }
    }

    function addContentFooter($msg) {
        $tmp = '<div class="content_footer">'.$msg.'</div>'. "\n";
        if ($this->buffering) {
            $this->content['content_footer'][] = $tmp;
        } else {
            print $tmp;
        }
    }

    function setTitle($msg) {
        $this->content['title'] = $msg;
    }

    function setCharset($msg) {
        $this->content['charset'] = $msg;
    }

    function addError($msg, $title="") {
        if ($title != "") {
            $tmp = '<h4 class="error">Error: '.$title.'</h4>'."\n".'<div class="error">'.$msg.'</div>'."\n";
        } else {
            $tmp = '<div class="error">Error: '.$msg.'</div>'."\n";
        }
        if ($this->buffering) {
            $this->content['body'][] = $tmp;
        } else {
            print $tmp;
        }
    }

    function addWarning($msg, $title = "") {
        if ($title != "") {
            $tmp = '<h4 class="warning">Warning: '.$title.'</h4>'."\n".'<div class="warning">'.$msg.'</div>'."\n";
        } else {
            $tmp = '<div class="warning">Warning: '.$msg.'</div>'."\n";
        }
        if ($this->buffering) {
            $this->content['body'][] = $tmp;
        } else {
            print $tmp;
        }
    }

    function addInfo($msg, $title = "") {
        if ($title != "") {
            $tmp = '<h4 class="info">Info: '.$title.'</h4>'."\n".'<div class="info">'.$msg.'</div>'."\n";
        } else {
            $tmp = '<div class="info">Info: '.$msg.'</div>'."\n";
        }
        if ($this->buffering) {
            $this->content['body'][] = $tmp;
        } else {
            print $tmp;
        }

    }

    function addText($msg, $title = "", $css_class="") {
        if ($css_class != "") $css_class = ' class="'.$css_class.'"';
        if ($title != "") $title = '<h4'.$css_class.'>'.$title.'</h4>';
        $tmp = $title.'<div'.$css_class.'>'.$msg.'</div>';
        if ($this->buffering) {
            $this->content['body'][] = $tmp;
        } else {
            print $tmp;
        }

    }

    function addDebug($msg, $title = '') {
        if ($title != "") {
            $tmp = '<h4 class="debug">Debug: '.$title.'</h4>'."\n".'<div class="debug">'.$msg.'</div>'."\n";
        } else {
            $tmp = '<div class="debug">Debug: '.$msg.'</div>'."\n";
        }
        if ($this->buffering) {
            $this->content['body'][] = $tmp;
        } else {
            print $tmp;
        }

    }

    function addSuccess($msg, $title = '') {
        if ($title != "") {
            $tmp = '<h4 class="success">Successful: '.$title.'</h4>'."\n".'<div class="success">'.$msg.'</div>'."\n";
        } else {
            $tmp = '<div class="success">Successful: '.$msg.'</div>'."\n";
        }
        if ($this->buffering) {
            $this->content['body'][] = $tmp;
        } else {
            print $tmp;
        }       
    }

    function getFooterLayout() {
        if ($this->buffering) return '';
        $res = '';
        foreach ($this->content['content_footer'] as $id => $line) {
            $res .= '<div class="content_footer">'.$line.'</div>'. "\n";
        }

        $res .= "</body>";
        $res .= "</html>";
        return $res;
    }

    function getHeaderLayout() {
        if ($this->buffering) return '';
        $res = '<html><head>'."\n";
        $res .= '<meta http-equiv="Content-Type" content="text/html; charset='.$this->content['charset'].'">'."\n";
        $res .= '<title>'.$this->static_title .' ' . $this->content['title'].'</title>'."\n";
        // header
        foreach ($this->content['header'] as $id => $head) {
            $res .= $head . "\n";
        }
        // css
        $res .= '<style type="text/css">'."\n".'<!--'."\n";
        foreach ($this->content['css'] as $id => $line) {
            $res .= $line . "\n";
        }
        $res .= '-->'."\n".'</style>'."\n";

        //end of head
        $res .= '</head><body>'."\n";

        $res .= '<h1>'.$this->content['title'].'</h1>';

        foreach ($this->content['content_header'] as $id =>  $line) {
            $res .= $line . "\n";
        }
        return $res;
    }

    function getContent() {
        if (! $this->buffering) {
            $res = '<html><head>'."\n";
            $res .= '<meta http-equiv="Content-Type" content="text/html; charset='.$this->content[charset].'">'."\n";
            $res .= '<title>'.$this->static_title .' ' . $this->content['title'].'</title>'."\n";
            // header
            foreach ($this->content['header'] as $id => $head) {
                $res .= $head . "\n";
            }
            // css
            $res .= '<style type="text/css">'."\n".'<!--'."\n";
            foreach ($this->content['css'] as $id => $line) {
                $res .= $line . "\n";
            }
            $res .= '-->'."\n".'</style>'."\n";

            //end of head
            $res .= '</head><body>'."\n";

            $res .= '<h1>'.$this->content['title'].'</h1>';

            foreach ($this->content['content_header'] as $id => $line) {
                $res .= $line . "\n";
            }

            foreach ($this->content['body'] as $id => $line) {
                $res .= $line . "\n";
            }

            foreach ($this->content['content_footer'] as $id => $line) {
                $res .= '<div class="content_footer">'.$line.'</div>'. "\n";
            }

            $res .= "</body>";
            $res .= "</html>";
        } else {
            $res = '';
        }       
        return $res;
    }    
}
tobiaskluge commented 2 years ago

Fixed now with latest update in PR #9