+
+ /**
+ * Returns the options from this ParserOptions which have been used.
+ */
+ public function usedOptions() {
+ return array_keys( $this->accessedOptions );
+ }
+
+ /**
+ * Resets the memory of options usage.
+ */
+ public function resetUsage() {
+ $this->accessedOptions = array();
+ }
+
+ /**
+ * Returns the full array of options that would have been used by
+ * in 1.16.
+ * Used to get the old parser cache entries when available.
+ */
+ public static function legacyOptions() {
+ global $wgUseDynamicDates;
+ $legacyOpts = array( 'math', 'stubthreshold', 'numberheadings', 'userlang', 'thumbsize', 'editsection', 'printable' );
+ if ( $wgUseDynamicDates ) {
+ $legacyOpts[] = 'dateformat';
+ }
+ return $legacyOpts;
+ }
+
+ /**
+ * Generate a hash string with the values set on these ParserOptions
+ * for the keys given in the array.
+ * This will be used as part of the hash key for the parser cache,
+ * so users sharign the options with vary for the same page share
+ * the same cached data safely.
+ *
+ * Replaces User::getPageRenderingHash()
+ *
+ * Extensions which require it should install 'PageRenderingHash' hook,
+ * which will give them a chance to modify this key based on their own
+ * settings.
+ *
+ * @since 1.17
+ * @return \string Page rendering hash
+ */
+ public function optionsHash( $forOptions ) {
+ global $wgContLang, $wgRenderHashAppend;
+
+ $confstr = '';
+
+ if ( in_array( 'math', $forOptions ) )
+ $confstr .= $this->mMath;
+ else
+ $confstr .= '*';
+
+
+ // Space assigned for the stubthreshold but unused
+ // since it disables the parser cache, its value will always
+ // be 0 when this function is called by parsercache.
+ // The conditional is here to avoid a confusing 0
+ if ( in_array( 'stubthreshold', $forOptions ) )
+ $confstr .= '!0' ;
+ else
+ $confstr .= '!*' ;
+
+ if ( in_array( 'dateformat', $forOptions ) )
+ $confstr .= '!' . $this->mDateFormat;
+
+ if ( in_array( 'numberheadings', $forOptions ) )
+ $confstr .= '!' . ( $this->mNumberHeadings ? '1' : '' );
+ else
+ $confstr .= '!*';
+
+ if ( in_array( 'userlang', $forOptions ) )
+ $confstr .= '!' . $this->mUserLang;
+ else
+ $confstr .= '!*';
+
+ if ( in_array( 'thumbsize', $forOptions ) )
+ $confstr .= '!' . $this->mThumbSize;
+ else
+ $confstr .= '!*';
+
+ // add in language specific options, if any
+ // FIXME: This is just a way of retrieving the url/user preferred variant
+ $confstr .= $wgContLang->getExtraHashOptions();
+
+ // Since the skin could be overloading link(), it should be
+ // included here but in practice, none of our skins do that.
+ // $confstr .= "!" . $this->mSkin->getSkinName();
+
+ $confstr .= $wgRenderHashAppend;
+
+ if ( !$this->mEditSection && in_array( 'editsection', $forOptions ) )
+ $confstr .= '!edit=0';
+ if ( $this->mIsPrintable && in_array( 'printable', $forOptions ) )
+ $confstr .= '!printable=1';
+
+ // Give a chance for extensions to modify the hash, if they have
+ // extra options or other effects on the parser cache.
+ wfRunHooks( 'PageRenderingHash', array( &$confstr ) );
+
+ // Make it a valid memcached key fragment
+ $confstr = str_replace( ' ', '_', $confstr );
+
+ return $confstr;
+ }