mediawiki-extensions-Visual.../ApiVisualEditor.php
Trevor Parscal c40174b60c Changed to use MIT license per agreement with the VisualEditor team
This license change is aimed at maximizing the reusability of this code
in other projects. VisualEditor is more than just an awesome editor for
MediaWiki, it's the new editor for the entire internet.

Added license and author files, plus mentions of the license to all
VisualEditor PHP, JavaScript and CSS files. Parser files have not been
modified but are effectively re-licensed since there's no overriding
license information. 3rd party libraries are not changed, but are all
already MIT licensed.

Change-Id: I895b256325db7c8689756edab34523de4418b0f2
2012-07-19 13:25:45 -07:00

152 lines
3.4 KiB
PHP

<?php
/**
* Parsoid API wrapper.
*
* @file
* @ingroup Extensions
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
class ApiVisualEditor extends ApiBase {
public function execute() {
global $wgRequest, $wgUser, $wgVisualEditorParsoidURL;
$parsoid = $wgVisualEditorParsoidURL;
$params = $this->extractRequestParams();
$page = Title::newFromText( $params['page'] );
if ( $params['paction'] === 'parse' ) {
if ( $page->exists() ) {
$parsed = Http::get(
$parsoid . $page->getPrefixedDBkey()
);
if ( $parsed ) {
$result = array(
'result' => 'success',
'parsed' => $parsed
);
} else {
$result = array(
'result' => 'error'
);
}
} else {
$result = array( 'result' => 'success', 'parsed' => '' );
}
} elseif ( $params['paction'] === 'save' && $wgUser->isBlocked() ) {
$result = array( 'result' => 'error' );
} elseif ( $params['paction'] === 'save' /* means user is not blocked */ ) {
// API Posts HTML to Parsoid Service, receives Wikitext,
// API Saves Wikitext to page.
$wikitext = Http::post( $parsoid . $page->getPrefixedDBkey(),
array( 'postData' => array( 'content' => $params['html'] ) )
);
if ( $wikitext ) {
/* Save Page */
$flags = $params['minor'] === 'true' ? EDIT_MINOR : 0;
$wikiPage = WikiPage::factory( $page );
$status = $wikiPage->doEdit(
$wikitext,
$params['summary'],
$flags
);
// Check status ?
// $status->ok === true ?
// Add / Remove from watch list.
if( $params['watch'] === 'true' ) {
if ( $wgUser->isWatched( $page ) === false ) {
$wgUser->addWatch( $page );
}
} else {
// Remove from watchlist?
if ( $wgUser->isWatched( $page ) === true ) {
$wgUser->removeWatch( $page );
}
}
/* Get page content */
// NOTE: possibly return content from revision object vs current rev ?
// $revisionObj = $status->value['revision'];
$apiParams = array(
'action' => 'parse',
'page' => $page
);
$api = new ApiMain(
new DerivativeRequest(
$wgRequest,
$apiParams,
false // was posted?
),
true // enable write?
);
$api->execute();
$result = $api->getResultData();
$result = array(
'result' => 'success',
'content' => $result['parse']['text']['*']
);
} else {
$result = array(
'result' => 'error'
);
}
}
$this->getResult()->addValue( null, $this->getModuleName(), $result );
}
public function getAllowedParams() {
return array(
'page' => array(
ApiBase::PARAM_REQUIRED => true,
),
'paction' => array(
ApiBase::PARAM_REQUIRED => true,
),
'minor' => array(
ApiBase::PARAM_REQUIRED => false,
),
'watch' => array(
ApiBase::PARAM_REQUIRED => false,
),
'html' => array(
ApiBase::PARAM_REQUIRED => false,
),
'summary' => null
);
}
public function needsToken() {
return false;
}
public function getVersion() {
return __CLASS__ . ': $Id$';
}
public function getParamDescription() {
return array(
'page' => 'The page to perform actions on.',
'paction' => 'Which action? parse or save.',
'minor' => 'Flag for minor edit.',
'html' => 'HTML to send to parsoid in exchange for wikitext'
);
}
public function getDescription() {
return 'Returns HTML5 for a page from the parsoid service.';
}
}