-
Notifications
You must be signed in to change notification settings - Fork 38
/
DLFixedPrepare.class.php
126 lines (115 loc) · 5.38 KB
/
DLFixedPrepare.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
if (!class_exists("DLFixedPrepare", false)) {
/**
* Class DLFixedPrepare
*/
class DLFixedPrepare
{
/**
* @param array $data
* @param DocumentParser $modx
* @param $_DL
* @param prepare_DL_Extender $_eDL
* @return array
*/
public static function buildMenu(array $data, DocumentParser $modx, $_DL, prepare_DL_Extender $_eDL)
{
$params = $_DL->getCFGDef('params', array());
if ($_DL->getCfgDef('currentDepth', 1) < $_DL->getCFGDef('maxDepth', 5)) {
$params['currentDepth'] = $_DL->getCfgDef('currentDepth', 1) + 1;
$params['parents'] = $data['id'];
$params['idType'] = 'parents';
$params['documents'] = '';
$data['dl.submenu'] = ($data['isfolder']) ? $modx->runSnippet('DLBuildMenu', $params) : '';
} else {
$data['dl.submenu'] = '';
}
$data['dl.currentDepth'] = $_DL->getCfgDef('currentDepth', 1);
if (($parentIDs = $_eDL->getStore('parentIDs')) === null) {
$parentIDs = array_values($modx->getParentIds($modx->documentObject['id']));
$_eDL->setStore('parentIDs', $parentIDs);
}
$isActive = ((is_array($parentIDs) && in_array($data['id'],
$parentIDs)) || $data['id'] == $modx->documentObject['id']);
$activeClass = $_DL->getCfgDef('activeClass', 'active');
if ($isActive) {
$data['dl.class'] .= ' ' . $activeClass;
}
if (strpos($data['dl.class'], 'current') !== false && strpos($data['dl.class'],
' ' . $activeClass) === false
) {
$data['dl.class'] = str_replace('current', 'current ' . $activeClass, $data['dl.class']);
}
$tpl = empty($data['dl.submenu']) ? 'noChildrenRowTPL' : 'mainRowTpl';
$_DL->renderTPL = $_DL->getCfgDef($tpl);
if (strpos($data['dl.class'], 'current') !== false) {
$_DL->renderTPL = $_DL->getCfgDef('TplCurrent', $_DL->renderTPL);
$_DL->renderTPL = $_DL->getCfgDef('TplCurrent' . $data['dl.currentDepth'], $_DL->renderTPL);
if (empty($data['dl.submenu'])) {
$_DL->renderTPL = $_DL->getCfgDef('TplCurrentNoChildren' . $data['dl.currentDepth'],
$_DL->renderTPL);
}
}
return $data;
}
/**
* @param array $data
* @param DocumentParser $modx
* @param DocLister $_DocLister
* @param prepare_DL_Extender $_extDocLister
* @return array
*/
public static function firstChar(
array $data,
DocumentParser $modx,
DocLister $_DocLister,
prepare_DL_Extender $_extDocLister
) {
$char = mb_substr($data['pagetitle'], 0, 1, 'UTF-8');
$oldChar = $_extDocLister->getStore('char');
if ($oldChar !== $char) {
$sanitarInIDs = $_DocLister->sanitarIn($_DocLister->getIDs());
$where = sqlHelper::trimLogicalOp($_DocLister->getCFGDef('addWhereList', ''));
$where = sqlHelper::trimLogicalOp(($where ? $where . ' AND ' : '') . $_DocLister->filtersWhere());
$where = sqlHelper::trimLogicalOp(($where ? $where . ' AND ' : '') . "SUBSTRING(c.pagetitle,1,1) = '" . $modx->db->escape($char) . "'");
if ($_DocLister->getCFGDef('idType', 'parents') == 'parents') {
if ($where != '') {
$where .= " AND ";
}
$where = "WHERE {$where} c.parent IN (" . $sanitarInIDs . ")";
if (!$_DocLister->getCFGDef('showNoPublish', 0)) {
$where .= " AND c.deleted=0 AND c.published=1";
}
} else {
if ($sanitarInIDs != "''") {
$where .= ($where ? " AND " : "") . "c.id IN ({$sanitarInIDs}) AND";
}
$where = sqlHelper::trimLogicalOp($where);
if ($_DocLister->getCFGDef('showNoPublish', 0)) {
if ($where != '') {
$where = "WHERE {$where}";
}
} else {
if ($where != '') {
$where = "WHERE {$where} AND ";
} else {
$where = "WHERE {$where} ";
}
$where .= "c.deleted=0 AND c.published=1";
}
}
$q = $_DocLister->dbQuery("SELECT count(c.id) as total FROM " . $_DocLister->getTable('site_content',
'c') . " " . $where);
$total = $modx->db->getValue($q);
$data['OnNewChar'] = $_DocLister->parseChunk($_DocLister->getCFGDef('tplOnNewChar'),
compact("char", "total"));
$_extDocLister->setStore('char', $char);
if ($oldChar !== null) {
$data['CharSeparator'] = $_DocLister->parseChunk($_DocLister->getCFGDef('tplCharSeparator'),
compact("char", "total"));
}
}
return $data;
}
}
}