-
Notifications
You must be signed in to change notification settings - Fork 5
/
qa-wa-layer.php
88 lines (73 loc) · 1.99 KB
/
qa-wa-layer.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
<?php
/*
Question2Answer Widget Anywhere plugin
License: http://www.gnu.org/licenses/gpl.html
*/
class qa_html_theme_layer extends qa_html_theme_base
{
private $wanyw_widgets = array();
private $wanyw_key = 'widgetanyw';
private $wanyw_opt = 'widgetanyw_active';
/* Positions:
head-tag
q-item-after
full-top, full-high, full-low, full-bottom
main-top, main-high, main-low, main-bottom
side-top, side-high, side-low, side-bottom
[old]
header-before -> full-top
header-after -> full-high
q-item-before -> main-high
a-list-after -> main-low
sidepanel-top -> side-top
sidepanel-bottom -> side-bottom
*/
function doctype()
{
if ( qa_opt($this->wanyw_opt) === '1' )
{
// fetch all widgets into a basic list
$sql = 'SELECT * FROM ^'.$this->wanyw_key.' ORDER BY ordering';
$widgets = qa_db_read_all_assoc( qa_db_query_sub($sql) );
foreach ( $widgets as $wid )
{
$wid['pages'] = explode(',', @$wid['pages']);
$show_all = $wid['pages'][0] == 'all';
$show_tmpl = in_array( $this->template, $wid['pages'] );
$show_custom = in_array( 'custom:'.$this->request, $wid['pages'] );
if ( $show_all || $show_tmpl || $show_custom )
$this->wanyw_widgets[] = $wid;
}
}
parent::doctype();
}
// most widgets now use a built-in location
function widgets( $region, $place )
{
parent::widgets( $region, $place );
$this->_output_widget( $region.'-'.$place );
}
function head_custom()
{
parent::head_custom();
// position inside <head> tag
$this->_output_widget('head-tag');
}
function q_view($q_view)
{
// position before question [replaced by `title-after`]
// $this->_output_widget('q-item-before');
parent::q_view($q_view);
// position after question
$this->_output_widget('q-item-after');
}
// outputs all widgets for specified position
private function _output_widget( $pos )
{
foreach ( $this->wanyw_widgets as $wid )
{
if ( $wid['position'] === $pos )
$this->output( $wid['content'] );
}
}
}