/extensions/Translate/specials/SpecialFirstSteps.php

https://github.com/ChuguluGames/mediawiki-svn · PHP · 248 lines · 177 code · 56 blank · 15 comment · 17 complexity · a09b582f7482f1fb1a260b9cffeec3ea MD5 · raw file

  1. <?php
  2. /**
  3. * Contains logic for special page Special:FirstSteps to guide users through
  4. * the process of becoming a translator.
  5. *
  6. * @file
  7. * @author Niklas Laxström
  8. * @copyright Copyright © 2010, Niklas Laxström
  9. * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  10. */
  11. /**
  12. * Implements a special page which assists users to become translators.
  13. * Currently it is tailored for the needs of translatewiki.net
  14. *
  15. * @ingroup SpecialPage TranslateSpecialPage
  16. */
  17. class SpecialFirstSteps extends UnlistedSpecialPage {
  18. protected $skin, $user, $out;
  19. public function __construct() {
  20. parent::__construct( 'FirstSteps' );
  21. }
  22. public function execute( $params ) {
  23. global $wgOut, $wgUser;
  24. $this->out = $wgOut;
  25. $this->user = $wgUser;
  26. $this->skin = $wgUser->getSkin();
  27. $this->out->addWikiMsg( 'translate-fs-intro' );
  28. $step = false;
  29. $step = $this->showSignup( $step );
  30. $step = $this->showSettings( $step );
  31. $step = $this->showUserpage( $step );
  32. $step = $this->showPermissions( $step );
  33. $step = $this->showTarget( $step );
  34. $step = $this->showEmail( $step );
  35. $this->out->setPageTitle( htmlspecialchars( wfMsg( 'translate-fs-pagetitle', wfMsg( $step ) ) ) );
  36. }
  37. protected function showSignup( $step ) {
  38. $header = new HtmlTag( 'h2' );
  39. $step_message = 'translate-fs-signup-title';
  40. $header->style( 'opacity', 0.4 )->content( wfMsg( $step_message ) );
  41. if ( $step ) {
  42. $this->out->addHtml( $header );
  43. return $step;
  44. }
  45. if ( $this->user->isLoggedIn() ) {
  46. $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) );
  47. $this->out->addHtml( $header );
  48. return $step;
  49. }
  50. $this->out->addHtml( $header->style( 'opacity', false ) );
  51. $login_page = SpecialPage::getTitleFor( 'Userlogin' );
  52. $query = array( 'returnto' => $this->getTitle() );
  53. $li_href = $login_page->getFullUrl( $query );
  54. $tag = new HtmlTag( 'span', "[$li_href |||]" );
  55. $tag->param( 'class', 'plainlinks' );
  56. list( $li_before, $li_after ) = explode( '|||', $tag, 2 );
  57. $su_href = $login_page->getFullUrl( $query + array( 'type' => 'signup' ) );
  58. $tag->content( "[$su_href |||]" );
  59. $tag->id( 'translate-fs-signup' );
  60. list( $su_before, $su_after ) = explode( '|||', $tag, 2 );
  61. $this->out->addWikiMsg( 'translate-fs-signup-text', $li_before, $li_after, $su_before, $su_after );
  62. return $step_message;
  63. }
  64. protected function showSettings( $step ) {
  65. global $wgRequest;
  66. $header = new HtmlTag( 'h2' );
  67. $step_message = 'translate-fs-settings-title';
  68. $header->style( 'opacity', 0.4 )->content( wfMsg( $step_message ) );
  69. if ( $step ) {
  70. $this->out->addHtml( $header );
  71. return $step;
  72. }
  73. if ( $this->user->getOption( 'language' ) !== 'en' || $wgRequest->getText( 'step' ) === 'settings' ) {
  74. $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) );
  75. $this->out->addHtml( $header );
  76. return $step;
  77. }
  78. $this->out->addHtml( $header->style( 'opacity', false ) );
  79. $this->out->addWikiMsg( 'translate-fs-settings-text' );
  80. $form = new HtmlTag( 'form' );
  81. $items = new TagContainer();
  82. $form->param( 'method', 'post' )->content( $items );
  83. $items[] = new RawHtml( Html::hidden( 'step', 'settings' ) );
  84. $items[] = new RawHtml( Xml::submitButton( wfMsg( 'translate-fs-settings-skip' ) ) );
  85. $this->out->addHtml( $form );
  86. return $step_message;
  87. }
  88. protected function showUserpage( $step ) {
  89. global $wgRequest;
  90. $textareaId = 'userpagetext';
  91. $header = new HtmlTag( 'h2' );
  92. $step_message = 'translate-fs-userpage-title';
  93. $header->style( 'opacity', 0.4 )->content( wfMsg( $step_message ) );
  94. if ( $step ) {
  95. $this->out->addHtml( $header );
  96. return $step;
  97. }
  98. $userpage = $this->user->getUserPage();
  99. $preload = "{{#babel:en-2}}\nI am My Name and....";
  100. if ( $wgRequest->wasPosted() &&
  101. $this->user->matchEditToken( $wgRequest->getVal( 'token' ) ) &&
  102. $wgRequest->getText( 'step' ) === 'userpage' )
  103. {
  104. $article = new Article( $userpage );
  105. $status = $article->doEdit( $wgRequest->getText( $textareaId ), $this->getTitle() );
  106. if ( $status->isOK() ) {
  107. $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) );
  108. $this->out->addHtml( $header );
  109. $this->out->addWikiMsg( 'translate-fs-userpage-done' );
  110. return false;
  111. } else {
  112. $this->out->addWikiText( $status->getWikiText() );
  113. $preload = $wgRequest->getText( 'userpagetext' );
  114. }
  115. }
  116. if ( $userpage->exists() ) {
  117. $revision = Revision::newFromTitle( $userpage );
  118. $text = $revision->getText();
  119. $preload = $text;
  120. if ( preg_match( '/{{#babel:/i', $text ) ) {
  121. $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) );
  122. $this->out->addHtml( $header );
  123. return false;
  124. }
  125. }
  126. $this->out->addHtml( $header->style( 'opacity', false ) );
  127. $this->out->addWikiMsg( 'translate-fs-userpage-text' );
  128. global $wgLang;
  129. $this->out->addHtml(
  130. TranslateUtils::languageSelector( $wgLang->getCode(), $wgLang->getCode() )
  131. );
  132. $form = new HtmlTag( 'form' );
  133. $items = new TagContainer();
  134. $form->param( 'method', 'post' )->content( $items );
  135. $items[] = new RawHtml( Html::hidden( 'step', 'userpage' ) );
  136. $items[] = new RawHtml( Html::hidden( 'token', $this->user->editToken() ) );
  137. $items[] = new RawHtml( Html::hidden( 'title', $this->getTitle() ) );
  138. $textarea = new HtmlTag( 'textarea', $preload );
  139. $items[] = $textarea->param( 'rows' , 5 )->id( $textareaId )->param( 'name', $textareaId );
  140. $items[] = new RawHtml( Xml::submitButton( wfMsg( 'translate-fs-userpage-submit' ) ) );
  141. $this->out->addHtml( $form );
  142. return $step_message;
  143. }
  144. protected function showPermissions( $step ) {
  145. $header = new HtmlTag( 'h2' );
  146. $step_message = 'translate-fs-permissions-title';
  147. $header->content( wfMsg( $step_message ) )->style( 'opacity', 0.4 );
  148. if ( $step ) {
  149. $this->out->addHtml( $header );
  150. return $step;
  151. }
  152. if ( $this->user->isAllowed( 'translate' ) ) {
  153. $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) );
  154. $this->out->addHtml( $header );
  155. return $step;
  156. }
  157. $this->out->addHtml( $header->style( 'opacity', false ) );
  158. $this->out->addWikiMsg( 'translate-fs-permissions-text' );
  159. return $step_message;
  160. }
  161. protected function showTarget( $step ) {
  162. $header = new HtmlTag( 'h2' );
  163. $step_message = 'translate-fs-target-title';
  164. $header->content( wfMsg( $step_message ) );
  165. if ( $step ) {
  166. $header->style( 'opacity', 0.4 );
  167. $this->out->addHtml( $header );
  168. return $step;
  169. }
  170. global $wgLang;
  171. $this->out->addHtml( $header );
  172. $this->out->addWikiMsg( 'translate-fs-target-text', $wgLang->getCode() );
  173. return $step_message;
  174. }
  175. protected function showEmail( $step ) {
  176. $header = new HtmlTag( 'h2' );
  177. $step_message = 'translate-fs-email-title';
  178. $header->style( 'opacity', 0.4 )->content( wfMsg( $step_message ) );
  179. if ( $step && $step !== 'translate-fs-target-title' ) {
  180. $this->out->addHtml( $header );
  181. return $step;
  182. }
  183. if ( $this->user->isEmailConfirmed() ) {
  184. $header->content( $header->content . wfMsg( 'translate-fs-pagetitle-done' ) );
  185. $this->out->addHtml( $header );
  186. return $step; // Start translating step
  187. }
  188. $this->out->addHtml( $header->style( 'opacity', false ) );
  189. $this->out->addWikiMsg( 'translate-fs-email-text' );
  190. return $step_message;
  191. }
  192. }