private function doDetail() {
		global $wgUser, $wgOut, $wgRequest;

		if ( !$wgUser->isAllowed( 'sigadmin' ) ) {
			$wgOut->permissionRequired( 'sigadmin' );
			return;
		}

		$sig = SignDocumentSignature::newFromDB( $wgRequest->getVal( 'detail' ) );

		if ( is_null( $sig ) ) {
			$wgOut->addWikiText( wfMsg( 'sig-nosuchsig' ) );
			return;
		}

		$wgOut->addHTML( $this->getDetailReviewForm( $sig ) );

		$wgOut->addHTML( $this->getDetailTable( $sig ) );

		$wgOut->addHTML( $this->runDetailUniqueQuery( $sig ) );
	}
	/**
	 * Create a new SignDocumentSignature using data obtained from a POST.
	 */
	public static function newFromPost() {
		global $wgRequest;
		if ( !$wgRequest->wasPosted() )
			throw new MWException( 'Page was not posted.' );

		self::$canRunCtor = true;
		$f = new SignDocumentSignature();
		self::$canRunCtor = false;

		$f->mTimestamp = wfTimestampNow();

		$f->mRealName   = $wgRequest->getVal( 'realname', '' );
		$f->mAddress    = $wgRequest->getVal( 'address', '' );
		$f->mCity       = $wgRequest->getVal( 'city', '' );
		$f->mState      = $wgRequest->getVal( 'state', '' );
		$f->mCountry    = $wgRequest->getVal( 'country', '' );
		$f->mZip        = $wgRequest->getVal( 'zip', '' );
		$f->mPhone      = $wgRequest->getVal( 'phone', '' );
		$f->mBday       = $wgRequest->getVal( 'bday', 0 );
		$f->mEmail      = $wgRequest->getVal( 'email', '' );

		$f->mIp    = wfGetIp();
		$f->mAgent = $wgRequest->getHeader( 'User-Agent' );

		if ( $wgRequest->getVal( 'anonymous' ) ) $f->mHiddenFields[] = 'realname';
		if ( $wgRequest->getVal( 'hideaddress' ) ) $f->mHiddenFields[] = 'address';
		if ( $wgRequest->getVal( 'hideextaddress' ) ) $f->mHiddenFields[] = 'extaddress';
		if ( $wgRequest->getVal( 'hidephone' ) ) $f->mHiddenFields[] = 'phone';
		if ( $wgRequest->getVal( 'hideemail' ) ) $f->mHiddenFields[] = 'email';
		if ( $wgRequest->getVal( 'hidebday' ) ) $f->mHiddenFields[] = 'bday';

		$f->mForm = SignDocumentForm::newFromDB( $wgRequest->getVal( 'doc' ) );

		return $f;
	}