PageHandler   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 17
eloc 42
dl 0
loc 95
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getTrees() 0 22 3
A menuTree() 0 20 6
A __construct() 0 3 1
B getBread() 0 21 7
1
<?php
2
3
namespace XoopsModules\About;
4
5
/**
6
 * About
7
 *
8
 * You may not change or alter any portion of this comment or credits
9
 * of supporting developers from this source code or any supporting source code
10
 * which is considered copyrighted (c) material of the original comment or credit authors.
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
 *
15
 * @copyright      The XOOPS Co.Ltd. http://www.xoops.com.cn
16
 * @copyright      XOOPS Project (https://xoops.org)
17
 * @license        GNU GPL 2 or later (https://www.gnu.org/licenses/gpl-2.0.html)
18
 * @package        about
19
 * @since          1.0.0
20
 * @author         Mengjue Shao <[email protected]>
21
 * @author         Susheng Yang <[email protected]>
22
 */
23
24
use XoopsModules\About;
25
26
/**
27
 * Class PageHandler
28
 */
29
class PageHandler extends \XoopsPersistableObjectHandler
30
{
31
    /**
32
     * PageHandler constructor.
33
     * @param null|\XoopsDatabase $db
34
     */
35
    public function __construct(\XoopsDatabase $db = null)
36
    {
37
        parent::__construct($db, 'about_page', Page::class, 'page_id', 'page_title');
38
    }
39
40
    /**
41
     * @param int    $pid
42
     * @param string $prefix
43
     * @param array  $tags
44
     * @return array
45
     */
46
    public function getTrees($pid = 0, $prefix = '--', array $tags = [])
47
    {
48
        $pid = (int)$pid;
49
        if (!\is_array($tags) || 0 === \count($tags)) {
0 ignored issues
show
introduced by
The condition is_array($tags) is always true.
Loading history...
50
            $tags = [
51
                'page_id',
52
                'page_pid',
53
                'page_title',
54
                'page_title',
55
                'page_menu_title',
56
                'page_status',
57
                'page_order',
58
            ];
59
        }
60
        $criteria = new \CriteriaCompo();
61
        $criteria->setSort('page_order');
62
        $criteria->order = 'ASC';
63
        $pageTree        = &$this->getAll($criteria, $tags);
64
        $tree            = new About\Tree($pageTree);
65
        //        $page_array = $tree->makeTree($prefix, $pid, $tags);
66
        //        return $page_array;
67
        return $tree->makeTree($prefix, $pid, $tags);
68
    }
69
70
    /**
71
     * @param array $pages
72
     * @param int   $key
73
     * @param int   $level
74
     * @return array|bool
75
     */
76
    public function menuTree(array $pages = [], $key = 0, $level = 1)
77
    {
78
        $ret = false;
79
        if (!\is_array($pages) || 0 === \count($pages)) {
0 ignored issues
show
introduced by
The condition is_array($pages) is always true.
Loading history...
80
            return $ret;
81
        }
82
        $menu = [];
83
84
        foreach ($pages as $k => $v) {
85
            if ($v['page_pid'] === $key) {
86
                $menu[$k]          = $v;
87
                $menu[$k]['level'] = $level;
88
                $child             = $this->menuTree($pages, $k, $level + 1);
89
                if (!empty($child)) {
90
                    $menu[$k]['child'] = $child;
91
                }
92
            }
93
        }
94
95
        return $menu;
96
    }
97
98
    /**
99
     * @param array $pages
100
     * @param int   $key
101
     * @return array|bool
102
     */
103
    public function getBread(array $pages = [], $key = 0)
104
    {
105
        if (!\is_array($pages) || 0 === \count($pages)) {
0 ignored issues
show
introduced by
The condition is_array($pages) is always true.
Loading history...
106
            return false;
107
        }
108
        $bread = [];
109
110
        if (isset($pages[$key])) {
111
            $current = $pages[$key];
112
            $bread   = [$current['page_id'] => $current['page_menu_title']];
113
            if ($current['page_pid'] > 0) {
114
                $pageBread = $this->getBread($pages, $current['page_pid']);
115
                if (!empty($pageBread)) {
116
                    foreach ($pageBread as $k => $v) {
117
                        $bread[$k] = $v;
118
                    }
119
                }
120
            }
121
        }
122
123
        return $bread;
124
    }
125
}
126