protected function showUserpage( $step ) { global $wgRequest; $textareaId = 'userpagetext'; $header = new HtmlTag( 'h2' ); $step_message = 'translate-fs-userpage-title'; $header->style( 'opacity', 0.4 )->content( wfMsg( $step_message ) ); if ( $step ) { $this->out->addHtml( $header ); return $step; } $userpage = $this->user->getUserPage(); $preload = "I am My Name and...."; if ( $wgRequest->wasPosted() && $this->user->matchEditToken( $wgRequest->getVal( 'token' ) ) && $wgRequest->getText( 'step' ) === 'userpage' ) { $babel = array(); for ( $i = 0; $i < 5; $i++ ) { $language = $wgRequest->getText( "babel-$i-language", '-' ); if ( $language === '-' ) continue; $level = $wgRequest->getText( "babel-$i-level", '-' ); $babel[$language] = $level; } arsort( $babel ); $babeltext = '{{#babel:'; foreach ( $babel as $language => $level ) { if ( $level === 'N' ) $level = ''; else $level = "-$level"; $babeltext .= "$language$level|"; } $babeltext = trim( $babeltext, '|' ); $babeltext .= "}}\n"; $article = new Article( $userpage, 0 ); $status = $article->doEdit( $babeltext . $wgRequest->getText( $textareaId ), $this->getTitle() ); if ( $status->isOK() ) { $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) ); $this->out->addHtml( $header ); $this->out->addWikiMsg( 'translate-fs-userpage-done' ); return false; } else { $this->out->addWikiText( $status->getWikiText() ); $preload = $wgRequest->getText( 'userpagetext' ); } } if ( $userpage->exists() ) { $revision = Revision::newFromTitle( $userpage ); $text = $revision->getText(); $preload = $text; if ( preg_match( '/{{#babel:/i', $text ) ) { $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) ); $this->out->addHtml( $header ); return false; } } $this->out->addHtml( $header->style( 'opacity', false ) ); $this->out->addWikiMsg( 'translate-fs-userpage-help' ); global $wgLang; $form = new HtmlTag( 'form' ); $items = new TagContainer(); $form->param( 'method', 'post' )->content( $items ); $items[] = new RawHtml( Html::hidden( 'step', 'userpage' ) ); $items[] = new RawHtml( Html::hidden( 'token', $this->user->editToken() ) ); $items[] = new RawHtml( Html::hidden( 'title', $this->getTitle() ) ); $languages = $this->languages( $wgLang->getCode() ); $selector = new XmlSelect(); $selector->addOption( wfMessage( 'translate-fs-selectlanguage' )->text(), '-' ); $selector->addOptions( $languages ); // Building a skill selector $skill = new XmlSelect(); $levels = 'N,5,4,3,2,1'; foreach ( explode( ',', $levels ) as $level ) { $skill->addOption( wfMessage( "translate-fs-userpage-level-$level" )->text(), $level ); } for ( $i = 0; $i < 5; $i++ ) { // Prefill en-2 and [wgLang]-N if [wgLang] != en if ( $i === 0 ) { $skill->setDefault( '2' ); $selector->setDefault( 'en' ); } elseif ( $i === 1 && $wgLang->getCode() !== 'en' ) { $skill->setDefault( 'N' ); $selector->setDefault( $wgLang->getCode() ); } else { $skill->setDefault( false ); $selector->setDefault( false ); } // [skill level selector][language selector] $skill->setAttribute( 'name', "babel-$i-level" ); $selector->setAttribute( 'name', "babel-$i-language" ); $items[] = New RawHtml( $skill->getHtml() . $selector->getHtml() . '<br />' ); } $textarea = new HtmlTag( 'textarea', $preload ); $items[] = $textarea->param( 'rows' , 5 )->id( $textareaId )->param( 'name', $textareaId ); $items[] = new RawHtml( Xml::submitButton( wfMsg( 'translate-fs-userpage-submit' ) ) ); $this->out->addHtml( $form ); return $step_message; }