Page MenuHomeWickedGov Phorge

ApiCentralNoticeQueryCampaign.php
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

ApiCentralNoticeQueryCampaign.php

<?php
use MediaWiki\Api\ApiBase;
/** @todo: This needs some major cleanup to work more like the rest of the API. */
class ApiCentralNoticeQueryCampaign extends ApiBase {
/**
* @var string sanitize campaign name
* FIXME: the string is apparently unrestricted in Special:CentralNotice
*/
private const CAMPAIGNS_FILTER = '/^[a-zA-Z0-9 _|\-]+$/';
public function execute() {
// Obtain the ApiResults object from the base
$result = $this->getResult();
// Get our language/project/country
$params = $this->extractRequestParams();
$campaigns = explode( '|', self::sanitizeText( $params['campaign'], self::CAMPAIGNS_FILTER, '' ) );
foreach ( $campaigns as $campaign ) {
$settings = Campaign::getCampaignSettings( $campaign );
if ( $settings ) {
$settings['banners'] = json_decode( $settings['banners'] );
# TODO this should probably be pushed down:
$settings['projects'] = explode( ', ', $settings['projects'] );
$settings['countries'] = explode( ', ', $settings['countries'] );
$settings['regions'] = explode( ', ', $settings['regions'] );
$settings['languages'] = explode( ', ', $settings['languages'] );
$settings['enabled'] = (bool)$settings['enabled'];
$settings['preferred'] = (bool)$settings['preferred'];
$settings['locked'] = (bool)$settings['locked'];
$settings['geo'] = (bool)$settings['geo'];
}
$result->addValue( [ $this->getModuleName() ], $campaign, $settings );
}
}
public function getAllowedParams() {
return [ 'campaign' => '' ];
}
/**
* @inheritDoc
*/
protected function getExamplesMessages() {
return [
'action=centralnoticequerycampaign&format=json&campaign=Plea_US'
=> 'apihelp-centralnoticequerycampaign-example-1',
];
}
/**
* Obtains the parameter $param, sanitizes by returning the first match to $regex or
* $default if there was no match.
*
* @param string $value Incoming value
* @param string $regex Sanitization regular expression
* @param string|null $default Default value to return on error
*
* @return string The sanitized value
*/
private static function sanitizeText( $value, $regex, $default = null ) {
$matches = [];
if ( preg_match( $regex, $value, $matches ) ) {
return $matches[ 0 ];
} else {
return $default;
}
}
}

File Metadata

Mime Type
text/x-php
Expires
Tue, Aug 18, 15:28 (3 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
56/c4/a6a110f0e40f53946917ea69399a
Default Alt Text
ApiCentralNoticeQueryCampaign.php (2 KB)

Event Timeline