PageRenderTime 71ms CodeModel.GetById 18ms RepoModel.GetById 3ms app.codeStats 0ms

/extensions/RefHelper/RefHelper.create.php

https://github.com/ChuguluGames/mediawiki-svn
PHP | 238 lines | 195 code | 28 blank | 15 comment | 32 complexity | 85bb2b63826d426f3dc4e08cc9fe2c65 MD5 | raw file
  1. <?php
  2. class RefHelper extends SpecialPage {
  3. const MSG = 'refhelper-';
  4. function __construct() {
  5. parent::__construct( 'RefHelper', 'edit', true, false, 'default', false );
  6. }
  7. /** A simple helper function to output the html of a table row with an input box.
  8. @param $out $wgOut should be passed
  9. @param $varname the string of the GET variable name
  10. @param $varval the value of the GET variable name
  11. @param $label the text describing the variable
  12. */
  13. private function addTableRow( &$out, $varname, $varval, $label, $size = 50 ) {
  14. $out->addHTML( Xml::openElement( 'tr' ) );
  15. $out->addHTML( Xml::openElement( 'td', array( 'class' => 'mw-label' ) ) );
  16. $out->addHTML( Xml::element( 'label', array( 'for' => $varname ), "$label" ) );
  17. $out->addHTML( Xml::closeElement( 'td' ) );
  18. $out->addHTML( Xml::openElement( 'td' ) );
  19. $out->addHTML( Xml::input( $varname, $size, $varval, array( 'id' => "inp_$varname" ) ) );
  20. $out->addHTML( Xml::closeElement( 'td' ) );
  21. $out->addHTML( Xml::closeElement( 'tr' ) );
  22. }
  23. /**
  24. * Another simple helper function to output the html of a table row, but with two input boxes.
  25. * See addTableRow for parameter details
  26. */
  27. private function add2ColTableRow( &$out, $varname1, $varname2, $varval1, $varval2, $label1, $label2 ) {
  28. $out->addHTML( Xml::openElement( 'tr' ) );
  29. $out->addHTML( Xml::openElement( 'td', array( 'class' => 'mw-label' ) ) );
  30. $out->addHTML( Xml::element( 'label', array( 'for' => $varname1 ), "$label1" ) );
  31. $out->addHTML( Xml::closeElement( 'td' ) );
  32. $out->addHTML( Xml::openElement( 'td' ) );
  33. $out->addHTML( Xml::input( $varname1, 15, $varval1, array( 'id' => "inp_$varname1", 'oninput' => 'updateFirstName(event)' ) ) );
  34. $out->addHTML( Xml::element( 'label', array( 'for' => $varname2 ), " $label2: " ) );
  35. $out->addHTML( Xml::input( $varname2, 20, $varval2, array( 'id' => "inp_$varname2", 'oninput' => 'updateSurname(event)' ) ) );
  36. $out->addHTML( Xml::closeElement( 'td' ) );
  37. $out->addHTML( Xml::closeElement( 'tr' ) );
  38. }
  39. /**
  40. * Create the html body and (depending on the GET variables) creates the page.
  41. */
  42. function execute( $par ) {
  43. global $wgRequest, $wgOut, $wgScript;
  44. $this->setHeaders();
  45. # Get request data from, e.g.
  46. $action = $wgRequest->getText( 'action' );
  47. $refname = htmlentities( $wgRequest->getText( 'refname' ) );
  48. $author1 = htmlentities( $wgRequest->getText( 'author1' ), ENT_COMPAT, "UTF-8" );
  49. $author2 = htmlentities( $wgRequest->getText( 'author2' ), ENT_COMPAT, "UTF-8" );
  50. $author3 = htmlentities( $wgRequest->getText( 'author3' ), ENT_COMPAT, "UTF-8" );
  51. $author4 = htmlentities( $wgRequest->getText( 'author4' ), ENT_COMPAT, "UTF-8" );
  52. $author5 = htmlentities( $wgRequest->getText( 'author5' ), ENT_COMPAT, "UTF-8" );
  53. $surname1 = htmlentities( $wgRequest->getText( 'surname1' ), ENT_COMPAT, "UTF-8" );
  54. $surname2 = htmlentities( $wgRequest->getText( 'surname2' ), ENT_COMPAT, "UTF-8" );
  55. $surname3 = htmlentities( $wgRequest->getText( 'surname3' ), ENT_COMPAT, "UTF-8" );
  56. $surname4 = htmlentities( $wgRequest->getText( 'surname4' ), ENT_COMPAT, "UTF-8" );
  57. $surname5 = htmlentities( $wgRequest->getText( 'surname5' ), ENT_COMPAT, "UTF-8" );
  58. $pmid = htmlentities( $wgRequest->getText( 'pmid' ), ENT_COMPAT, "UTF-8" );
  59. $articletitle = htmlentities( $wgRequest->getText( 'articletitle' ) );
  60. $journal = htmlentities( $wgRequest->getText( 'journal' ) );
  61. $volume = htmlentities( $wgRequest->getText( 'volume' ) );
  62. $pages = htmlentities( $wgRequest->getText( 'pages' ) );
  63. $year = htmlentities( $wgRequest->getText( 'year' ) );
  64. $cat1 = htmlentities( $wgRequest->getText( 'cat1' ) );
  65. $cat2 = htmlentities( $wgRequest->getText( 'cat2' ) );
  66. $cat3 = htmlentities( $wgRequest->getText( 'cat3' ) );
  67. $cat4 = htmlentities( $wgRequest->getText( 'cat4' ) );
  68. $reqfilled = strlen( $author1 ) && strlen( $articletitle ) && strlen( $journal ) && strlen( $year ) && strlen( $refname );
  69. if ( $action != "submit" || !$reqfilled ) {
  70. if ( strlen( $pmid ) ) {
  71. $result = RefSearch::query_pmid( $pmid );
  72. $articletitle = $result["title"];
  73. $journal = $result["journal"];
  74. $volume = $result["volume"];
  75. $pages = $result["pages"];
  76. $year = $result["year"];
  77. $auths = $result["authors"];
  78. if ( isset( $auths[0] ) ) {
  79. $author1 = $auths[0][0];
  80. $surname1 = $auths[0][1];
  81. }
  82. if ( isset( $auths[1] ) ) {
  83. $author2 = $auths[1][0];
  84. $surname2 = $auths[1][1];
  85. }
  86. if ( isset( $auths[2] ) ) {
  87. $author3 = $auths[2][0];
  88. $surname3 = $auths[2][1];
  89. }
  90. if ( isset( $auths[3] ) ) {
  91. $author4 = $auths[3][0];
  92. $surname4 = $auths[3][1];
  93. }
  94. if ( isset( $auths[4] ) ) {
  95. $author5 = $auths[4][0];
  96. $surname5 = $auths[4][1];
  97. }
  98. }
  99. # Output
  100. $wgOut->addHTML(
  101. Xml::fieldset( wfMsg( self::MSG . 'refcreate_legend' ) ) .
  102. Xml::openElement( 'form', array( 'action' => $wgScript, 'id' => 'mw_create-ref-form' ) ) .
  103. Html::Hidden( 'title', $this->getTitle()->getPrefixedText() ) .
  104. Html::Hidden( 'action', 'submit' ) .
  105. Xml::openElement( 'table', array( 'id' => 'mw_create-ref-table' ) ) .
  106. Xml::openElement( 'tbody' ) );
  107. $wgOut->addHTML(
  108. Xml::openElement( 'tr' ) .
  109. Xml::openElement( 'td', array( 'class' => 'mw-label' ) ) .
  110. Xml::element( 'label', array( 'for' => 'inp_pastearea' ), wfMsg( self::MSG . 'label_workspace' ) . ":" ) .
  111. Xml::closeElement( 'td' ) .
  112. Xml::openElement( 'td' ) .
  113. Xml::textarea( 'inp_pastearea', '', 20, 5, array( 'oninput' => 'autoPopulateRefFields()' ) ) .
  114. Xml::closeElement( 'td' ) .
  115. Xml::closeElement( 'tr' ) );
  116. self::addTableRow( $wgOut, "pmid", $pmid, 'PMID', 15 );
  117. self::add2ColTableRow( $wgOut, 'author1', 'surname1', $author1, $surname1,
  118. wfMsg( self::MSG . 'label_authorforename', '1' ), wfMsg( self::MSG . 'label_authorsurname', '1' ) );
  119. self::add2ColTableRow( $wgOut, 'author2', 'surname2', $author2, $surname2,
  120. wfMsg( self::MSG . 'label_authorforename', '2' ), wfMsg( self::MSG . 'label_authorsurname', '2' ) );
  121. self::add2ColTableRow( $wgOut, 'author3', 'surname3', $author3, $surname3,
  122. wfMsg( self::MSG . 'label_authorforename', '3' ), wfMsg( self::MSG . 'label_authorsurname', '3' ) );
  123. self::add2ColTableRow( $wgOut, 'author4', 'surname4', $author4, $surname4,
  124. wfMsg( self::MSG . 'label_authorforename', '4' ), wfMsg( self::MSG . 'label_authorsurname', '4' ) );
  125. self::add2ColTableRow( $wgOut, 'author5', 'surname5', $author5, $surname5,
  126. wfMsg( self::MSG . 'label_authorforename', '5' ), wfMsg( self::MSG . 'label_authorsurname', '5' ) );
  127. self::addTableRow( $wgOut, "articletitle", $articletitle, wfMsg( self::MSG . 'title' ) );
  128. self::addTableRow( $wgOut, "journal", $journal, wfMsg( self::MSG . 'journal' ) );
  129. self::addTableRow( $wgOut, "pages", $pages, wfMsg( self::MSG . 'pages' ) );
  130. self::addTableRow( $wgOut, "year", $year, wfMsg( self::MSG . 'year' ) );
  131. self::addTableRow( $wgOut, "refname", $refname, wfMsg( self::MSG . 'refname' ) );
  132. self::addTableRow( $wgOut, "cat1", $cat1, wfMsg( self::MSG . 'category', '1' ) );
  133. self::addTableRow( $wgOut, "cat2", $cat2, wfMsg( self::MSG . 'category', '2' ) );
  134. self::addTableRow( $wgOut, "cat3", $cat3, wfMsg( self::MSG . 'category', '3' ) );
  135. self::addTableRow( $wgOut, "cat4", $cat4, wfMsg( self::MSG . 'category', '4' ) );
  136. $wgOut->addHTML(
  137. Xml::openElement( 'tr' ) .
  138. Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) .
  139. Xml::element( 'input', array( 'value' => wfMsg( self::MSG . 'create' ), 'type' => 'submit' ) ) .
  140. Xml::closeElement( 'td' ) .
  141. Xml::closeElement( 'tr' ) .
  142. Xml::closeElement( 'tbody' ) .
  143. Xml::closeElement( 'table' ) .
  144. Xml::closeElement( 'form' ) .
  145. Xml::closeElement( 'fieldset' ) );
  146. }
  147. else
  148. {
  149. global $wgRefHelperCiteTemplate, $wgRefHelperPageTemplate, $wgRefHelperCiteNS;
  150. $db = wfGetDB( DB_MASTER );
  151. $citeTitle = null;
  152. if ( strlen( $wgRefHelperCiteNS ) ) $citeTitle = Title::newFromText( "$wgRefHelperCiteNS:$refname" );
  153. $pageTitle = Title::newFromText( $refname );
  154. $paramtext = '';
  155. $paramtext .= "| first1 = $author1\n";
  156. $paramtext .= "| last1 = $surname1\n";
  157. if ( strlen( $author2 ) || strlen( $surname2 ) ) {
  158. $paramtext .= "| first2 = $author2\n";
  159. $paramtext .= "| last2 = $surname2\n";
  160. }
  161. if ( strlen( $author3 ) || strlen( $surname3 ) ) {
  162. $paramtext .= "| first3 = $author3\n";
  163. $paramtext .= "| last3 = $surname3\n";
  164. }
  165. if ( strlen( $author4 ) || strlen( $surname4 ) ) {
  166. $paramtext .= "| first4 = $author4\n";
  167. $paramtext .= "| last4 = $surname4\n";
  168. }
  169. if ( strlen( $author5 ) || strlen( $surname5 ) ) {
  170. $paramtext .= "| first5 = $author5\n";
  171. $paramtext .= "| last5 = $surname5\n";
  172. }
  173. $paramtext .= "| refname = $refname\n";
  174. $paramtext .= "| articletitle = $articletitle\n";
  175. $paramtext .= "| titlelink = [[$refname|$articletitle]]\n";
  176. $paramtext .= "| journal = $journal\n";
  177. $paramtext .= "| volume = $volume\n";
  178. $paramtext .= "| pages = $pages\n";
  179. $paramtext .= "| pmid = $pmid\n";
  180. $paramtext .= "| year = $year\n";
  181. $paramtext .= "| lt = <\n"; // can be used to allow templates to create pages with onlyinclude, etc.
  182. $paramtext .= "| categories = ";
  183. if ( strlen( $cat1 ) ) $paramtext .= "[[Category:$cat1]]\n";
  184. if ( strlen( $cat2 ) ) $paramtext .= "[[Category:$cat2]]\n";
  185. if ( strlen( $cat3 ) ) $paramtext .= "[[Category:$cat3]]\n";
  186. if ( strlen( $cat4 ) ) $paramtext .= "[[Category:$cat4]]\n";
  187. if ( $citeTitle->exists() == false ) {
  188. $newcontent = '{{' . "$wgRefHelperCiteTemplate\n$paramtext}}\n";
  189. $citePage = new Article( $citeTitle );
  190. $citePage->doEdit( $newcontent, wfMsg( self::MSG . 'refcreate_autocomment' ) );
  191. $rev_id = $citePage->insertOn( $db );
  192. $wgOut->addWikiText( wfMsg( self::MSG . 'refcreate_success', array( "$wgRefHelperCiteNS:$refname" ) ) );
  193. }
  194. else {
  195. $wgOut->addWikiText( wfMsg( self::MSG . 'refcreate_failure', array( "$wgRefHelperCiteNS:$refname" ) ) );
  196. }
  197. if ( $pageTitle->exists() == false ) {
  198. $newcontent = '{{' . "$wgRefHelperPageTemplate\n$paramtext}}\n";
  199. $newPage = new Article( $pageTitle );
  200. $newPage->doEdit( $newcontent, wfMsg( self::MSG . 'refcreate_autocomment' ) );
  201. $rev_id = $newPage->insertOn( $db );
  202. $wgOut->addWikiText( wfMsg( self::MSG . 'refcreate_success', array( $refname ) ) );
  203. }
  204. else {
  205. $wgOut->addWikiText( wfMsg( self::MSG . 'refcreate_failure', array( $refname ) ) );
  206. }
  207. $wgOut->addWikiText( '[[Special:RefHelper|' . wfMsg( self::MSG . 'refcreate_another' ) . ']]' );
  208. }
  209. }
  210. }