Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5965498
CentralNoticePager.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
CentralNoticePager.php
View Options
<?php
use
MediaWiki\Html\Html
;
use
MediaWiki\Xml\Xml
;
use
Wikimedia\Rdbms\IExpression
;
use
Wikimedia\Rdbms\LikeValue
;
class
CentralNoticePager
extends
TemplatePager
{
public
function
__construct
(
$special
,
$filter
=
''
)
{
parent
::
__construct
(
$special
,
$filter
);
}
/**
* Pull banners from the database
* @return array[]
*/
public
function
getQueryInfo
()
{
$dbr
=
CNDatabase
::
getDb
();
// First we must construct the filter before we pull banners
// When the filter comes in it is space delimited, so break that...
$likeArray
=
preg_split
(
'/
\s
/'
,
$this
->
filter
);
// ...and then insert all the wildcards between search terms
if
(
!
$likeArray
)
{
$likeArray
=
[
$dbr
->
anyString
()
];
}
else
{
$anyStringToken
=
$dbr
->
anyString
();
$tempArray
=
[
$anyStringToken
];
foreach
(
$likeArray
as
$likePart
)
{
$tempArray
[]
=
$likePart
;
$tempArray
[]
=
$anyStringToken
;
}
$likeArray
=
$tempArray
;
}
// Get the current campaign and filter on that as well if required
$notice
=
$this
->
mRequest
->
getVal
(
'notice'
);
$noticeId
=
Campaign
::
getNoticeId
(
$notice
);
if
(
$noticeId
)
{
// Return all the banners not already assigned to the current campaign
return
[
'tables'
=>
[
'assignments'
=>
'cn_assignments'
,
'templates'
=>
'cn_templates'
,
],
'fields'
=>
[
'templates.tmp_name'
,
'templates.tmp_id'
,
],
'conds'
=>
[
'assignments.tmp_id'
=>
null
,
$dbr
->
expr
(
'tmp_name'
,
IExpression
::
LIKE
,
new
LikeValue
(
...
$likeArray
)
),
'templates.tmp_is_template'
=>
0
,
],
'join_conds'
=>
[
'assignments'
=>
[
'LEFT JOIN'
,
[
"assignments.tmp_id = templates.tmp_id "
,
"assignments.not_id"
=>
$noticeId
]
]
]
];
}
else
{
// Return all the banners in the database
return
[
'tables'
=>
[
'templates'
=>
'cn_templates'
],
'fields'
=>
[
'templates.tmp_name'
,
'templates.tmp_id'
],
'conds'
=>
[
$dbr
->
expr
(
'templates.tmp_name'
,
IExpression
::
LIKE
,
new
LikeValue
(
...
$likeArray
)
),
'templates.tmp_is_template'
=>
0
,
],
];
}
}
/**
* Generate the content of each table row (1 row = 1 banner)
* @param stdClass $row
* @return string HTML
*/
public
function
formatRow
(
$row
)
{
// Begin banner row
$htmlOut
=
Html
::
openElement
(
'tr'
);
if
(
$this
->
editable
)
{
// Add box
$htmlOut
.=
Html
::
rawElement
(
'td'
,
[
'valign'
=>
'top'
],
Html
::
check
(
'addTemplates[]'
,
false
,
[
'value'
=>
$row
->
tmp_name
]
)
);
// Bucket
$htmlOut
.=
Html
::
rawElement
(
'td'
,
[
'valign'
=>
'top'
],
$this
->
bucketDropdown
(
$row
->
tmp_name
)
);
// Weight select
$htmlOut
.=
Html
::
rawElement
(
'td'
,
[
'valign'
=>
'top'
,
'class'
=>
'cn-weight'
],
Xml
::
listDropdown
(
"weight[$row->tmp_id]"
,
CentralNotice
::
dropdownList
(
$this
->
msg
(
'centralnotice-weight'
)->
text
(),
range
(
0
,
100
,
5
)
),
''
,
'25'
)
);
}
// Render banner row.
$htmlOut
.=
Html
::
rawElement
(
'td'
,
[
'valign'
=>
'top'
],
BannerRenderer
::
linkToBanner
(
$row
->
tmp_name
)
);
// End banner row
$htmlOut
.=
Html
::
closeElement
(
'tr'
);
return
$htmlOut
;
}
/**
* Specify table headers
*
* @return string
*/
public
function
getStartBody
()
{
$htmlOut
=
''
;
$htmlOut
.=
Html
::
openElement
(
'table'
,
[
'cellpadding'
=>
9
]
);
$htmlOut
.=
Html
::
openElement
(
'tr'
);
if
(
$this
->
editable
)
{
$htmlOut
.=
Html
::
element
(
'th'
,
[
'align'
=>
'left'
,
'width'
=>
'5%'
],
$this
->
msg
(
"centralnotice-add"
)->
text
()
);
$htmlOut
.=
Html
::
element
(
'th'
,
[
'align'
=>
'left'
,
'width'
=>
'5%'
],
$this
->
msg
(
'centralnotice-bucket'
)->
text
()
);
$htmlOut
.=
Html
::
element
(
'th'
,
[
'align'
=>
'left'
,
'width'
=>
'5%'
,
'class'
=>
'cn-weight'
],
$this
->
msg
(
'centralnotice-weight'
)->
text
()
);
}
$htmlOut
.=
Html
::
element
(
'th'
,
[
'align'
=>
'left'
],
$this
->
msg
(
'centralnotice-templates'
)->
text
()
);
$htmlOut
.=
Html
::
closeElement
(
'tr'
);
return
$htmlOut
;
}
/**
* Close table
*
* @return string
*/
public
function
getEndBody
()
{
return
Html
::
closeElement
(
'table'
);
}
private
function
bucketDropdown
(
$bannerName
)
{
global
$wgNoticeNumberOfBuckets
;
$html
=
''
;
foreach
(
range
(
0
,
$wgNoticeNumberOfBuckets
-
1
)
as
$value
)
{
$html
.=
Xml
::
option
(
chr
(
$value
+
ord
(
'A'
)
),
$value
,
false
,
[]
);
}
return
Html
::
rawElement
(
'select'
,
[
'name'
=>
"bucket-{$bannerName}"
,
// class should coordinate with CentralNotice::bucketDropdown()
'class'
=>
'bucketSelector'
,
],
$html
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Oct 3, 11:00 (1 w, 1 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
ce/59/28a747901f8f7453db073e251ad5
Default Alt Text
CentralNoticePager.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment