-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtbs_plugin_navbar.php
More file actions
128 lines (108 loc) · 3.71 KB
/
Copy pathtbs_plugin_navbar.php
File metadata and controls
128 lines (108 loc) · 3.71 KB
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
127
128
<?php
/*
********************************************************
TinyButStrong Plug-in: Navigation Bar
Version 1.0.6, on 2008-01-29, by Skrol29
********************************************************
*/
define('TBS_NAVBAR','tbsNavBar');
class tbsNavBar {
function OnInstall() {
$this->Version = '1.0.6';
return array('OnCommand');
}
function OnCommand($BlockLst,$Options,$PageCurr,$RecCnt=-1,$PageSize=1) {
$BlockLst = explode(',',$BlockLst);
foreach ($BlockLst as $BlockName) {
$BlockName = trim($BlockName);
$this->meth_Merge_NavigationBar($this->TBS->Source,$BlockName,$Options,$PageCurr,$RecCnt,$PageSize);
}
}
function meth_Merge_NavigationBar(&$Txt,$BlockName,$Options,$PageCurr,$RecCnt,$PageSize) {
$TBS =& $this->TBS;
// Get block parameters
$PosBeg = 0;
$PrmLst = array();
while ($Loc = $TBS->meth_Locator_FindTbs($Txt,$BlockName,$PosBeg,'.')) {
if (isset($Loc->PrmLst['block'])) $PrmLst = array_merge($PrmLst,$Loc->PrmLst);
$PosBeg = $Loc->PosEnd;
}
// Prepare options
if (!is_array($Options)) $Options = array('navsize'=>intval($Options));
$Options = array_merge($Options,$PrmLst);
// Default options
if (!isset($Options['navsize'])) $Options['navsize'] = 10;
if (!isset($Options['navpos'])) $Options['navpos'] = 'step';
if (!isset($Options['pagemin'])) $Options['pagemin'] = 1;
// Check options
if ($Options['navsize']<=0) $Options['navsize'] = 10;
if ($PageSize<=0) $PageSize = 1;
if ($PageCurr<$Options['pagemin']) $PageCurr = $Options['pagemin'];
$CurrPos = 0;
$CurrNav = array('curr'=>$PageCurr,'first'=>$Options['pagemin'],'last'=>-1,'bound'=>false);
// Calculate displayed PageMin and PageMax
if ($Options['navpos']=='centred') {
$PageMin = $Options['pagemin']-1+$PageCurr - intval(floor($Options['navsize']/2));
} else {
// Display by block
$PageMin = $Options['pagemin']-1+$PageCurr - ( ($PageCurr-1) % $Options['navsize']);
}
$PageMin = max($PageMin,$Options['pagemin']);
$PageMax = $PageMin + $Options['navsize'] - 1;
// Calculate previous and next pages
$CurrNav['prev'] = $PageCurr - 1;
if ($CurrNav['prev']<$Options['pagemin']) {
$CurrNav['prev'] = $Options['pagemin'];
$CurrNav['bound'] = $Options['pagemin'];
}
$CurrNav['next'] = $PageCurr + 1;
if ($RecCnt>=0) {
$PageCnt = $Options['pagemin']-1 + intval(ceil($RecCnt/$PageSize));
$PageMax = min($PageMax,$PageCnt);
$PageMin = max($Options['pagemin'],$PageMax-$Options['navsize']+1);
} else {
$PageCnt = $Options['pagemin']-1;
}
if ($PageCnt>=$Options['pagemin']) {
if ($PageCurr>=$PageCnt) {
$CurrNav['next'] = $PageCnt;
$CurrNav['last'] = $PageCnt;
$CurrNav['bound'] = $PageCnt;
} else {
$CurrNav['last'] = $PageCnt;
}
}
// Merge general information
$Pos = 0;
while ($Loc = $TBS->meth_Locator_FindTbs($Txt,$BlockName,$Pos,'.')) {
$Pos = $Loc->PosBeg + 1;
$x = strtolower($Loc->SubName);
if (isset($CurrNav[$x])) {
$Val = $CurrNav[$x];
if (($CurrNav['bound']!==false) and ($CurrNav[$x]==$CurrNav['bound'])) {
if (isset($Loc->PrmLst['endpoint'])) {
$Val = '';
}
}
$TBS->meth_Locator_Replace($Txt,$Loc,$Val,false);
}
}
// Prepare data to merge
$Query = '';
$Data = array();
$RecSpe = 0;
$RecCurr = 0;
if (isset($PrmLst['bmagnet']) and ($PageMin==$PageMax)) {
// No data to merge
} else {
for ($PageId=$PageMin;$PageId<=$PageMax;$PageId++) {
$RecCurr++;
if ($PageId==$PageCurr) $RecSpe = $RecCurr;
$Data[] = array('page'=>$PageId);
}
}
// Merge the nav bar
$TBS->meth_Merge_Block($Txt,$BlockName,$Data,$Query,'currpage',$RecSpe);
}
}
?>