$params = $this->getFinalParams();
$results = array();
- foreach ( $params as $paramName => $paramSettings ) {
- $results[$paramName] = $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+ if( $params ) { // getFinalParams() can return false
+ foreach ( $params as $paramName => $paramSettings ) {
+ $results[$paramName] = $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+ }
}
return $results;
return $mValidNamespaces;
}
+
/**
- * Handle watchlist settings
- */
- protected function getWatchlistValue ( $watchlist, $titleObj ) {
+ * Return true if we're to watch the page, false if not, null if no change.
+ * @param $watchlist String Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param $titleObj Title the page under consideration
+ * @param $userOption The user option to consider when $watchlist=preferences.
+ * If not set will magically default to either watchdefault or watchcreations
+ * @returns mixed
+ */
+ protected function getWatchlistValue ( $watchlist, $titleObj, $userOption = null ) {
switch ( $watchlist ) {
case 'watch':
return true;
+
case 'unwatch':
return false;
+
case 'preferences':
- if ( $titleObj->exists() ) {
- global $wgUser;
- return $wgUser->getOption( 'watchdefault' ) || $titleObj->userIsWatching();
+ global $wgUser;
+ # If the user is already watching, don't bother checking
+ if ( $titleObj->userIsWatching() ) {
+ return null;
}
- return false;
+ # If no user option was passed, use watchdefault or watchcreation
+ if ( is_null( $userOption ) ) {
+ $userOption = $titleObj->exists()
+ ? 'watchdefault' : 'watchcreations';
+ }
+ # If the corresponding user option is true, watch, else no change
+ return $wgUser->getOption( $userOption ) ? true : null;
+
case 'nochange':
+ return null;
+
default:
- return $titleObj->userIsWatching();
+ return null;
+ }
+ }
+
+ /**
+ * Set a watch (or unwatch) based the based on a watchlist parameter.
+ * @param $watch String Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param $titleObj Title the article's title to change
+ * @param $userOption The user option to consider when $watch=preferences
+ */
+ protected function setWatch ( $watch, $titleObj, $userOption = null ) {
+ $value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
+ if( $value === null ) {
+ return;
+ }
+
+ $articleObj = new Article( $titleObj );
+ if ( $value ) {
+ $articleObj->doWatch();
+ } else {
+ $articleObj->doUnwatch();
}
}