PageRenderTime 21ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/extensions/CodeReview/CodeReview.php

https://github.com/brion/mediawiki-svn
PHP | 203 lines | 113 code | 33 blank | 57 comment | 3 complexity | 37f51d7d70272f1e1a61846ef6245b46 MD5 | raw file
  1. <?php
  2. if ( !defined( 'MEDIAWIKI' ) ) die();
  3. /**
  4. *
  5. * @author Brion Vibber
  6. * @author Aaron Schulz
  7. * @author Alexandre Emsenhuber
  8. * @author Chad Horohoe
  9. * @copyright Copyright © 2008 Brion Vibber <brion@pobox.com>
  10. * @copyright Copyright © 2008 Chad Horohoe <innocentkiller@gmail.com>
  11. * @copyright Copyright © 2008 Aaron Schulz <JSchulz_4587@msn.com>
  12. * @copyright Copyright © 2008 Alexandre Emsenhuber <alex.emsenhuber@bluewin.ch>
  13. * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  14. */
  15. /*
  16. What do I need out of SVN?
  17. 1) Find out what revisions exist
  18. 2) Get id/author/timestamp/notice basics
  19. 3) base path helps if available
  20. 4) get list of affected files
  21. 5) get diffs
  22. http://pecl.php.net/package/svn
  23. */
  24. $wgExtensionCredits['specialpage'][] = array(
  25. 'path' => __FILE__,
  26. 'name' => 'CodeReview',
  27. 'url' => 'http://www.mediawiki.org/wiki/Extension:CodeReview',
  28. 'author' => array( 'Brion Vibber', 'Aaron Schulz', 'Alexandre Emsenhuber', 'Chad Horohoe' ),
  29. 'descriptionmsg' => 'codereview-desc',
  30. );
  31. $dir = dirname( __FILE__ ) . '/';
  32. $wgAutoloadClasses['ApiCodeUpdate'] = $dir . 'api/ApiCodeUpdate.php';
  33. $wgAutoloadClasses['ApiCodeDiff'] = $dir . 'api/ApiCodeDiff.php';
  34. $wgAutoloadClasses['ApiCodeComments'] = $dir . 'api/ApiCodeComments.php';
  35. $wgAutoloadClasses['ApiCodeRevisions'] = $dir . 'api/ApiCodeRevisions.php';
  36. $wgAutoloadClasses['SubversionAdaptor'] = $dir . 'backend/Subversion.php';
  37. $wgAutoloadClasses['CodeDiffHighlighter'] = $dir . 'backend/DiffHighlighter.php';
  38. $wgAutoloadClasses['CodeRepository'] = $dir . 'backend/CodeRepository.php';
  39. $wgAutoloadClasses['CodeRevision'] = $dir . 'backend/CodeRevision.php';
  40. $wgAutoloadClasses['CodeComment'] = $dir . 'backend/CodeComment.php';
  41. $wgAutoloadClasses['CodeCommentLinker'] = $dir . 'backend/CodeCommentLinker.php';
  42. $wgAutoloadClasses['CodeCommentLinkerHtml'] = $dir . 'backend/CodeCommentLinker.php';
  43. $wgAutoloadClasses['CodeCommentLinkerWiki'] = $dir . 'backend/CodeCommentLinker.php';
  44. $wgAutoloadClasses['CodePropChange'] = $dir . 'backend/CodePropChange.php';
  45. $wgAutoloadClasses['CodeSignoff'] = $dir . 'backend/CodeSignoff.php';
  46. $wgAutoloadClasses['RepoStats'] = $dir . 'backend/RepoStats.php';
  47. $wgAutoloadClasses['CodeRepoListView'] = $dir . 'ui/CodeRepoListView.php';
  48. $wgAutoloadClasses['CodeRepoStatsView'] = $dir . 'ui/CodeRepoStatsView.php';
  49. $wgAutoloadClasses['CodeRevisionAuthorView'] = $dir . 'ui/CodeRevisionAuthorView.php';
  50. $wgAutoloadClasses['CodeRevisionAuthorLink'] = $dir . 'ui/CodeRevisionAuthorLink.php';
  51. $wgAutoloadClasses['CodeRevisionCommitter'] = $dir . 'ui/CodeRevisionCommitter.php';
  52. $wgAutoloadClasses['CodeRevisionListView'] = $dir . 'ui/CodeRevisionListView.php';
  53. $wgAutoloadClasses['CodeRevisionStatusView'] = $dir . 'ui/CodeRevisionStatusView.php';
  54. $wgAutoloadClasses['CodeRevisionTagView'] = $dir . 'ui/CodeRevisionTagView.php';
  55. $wgAutoloadClasses['CodeRevisionView'] = $dir . 'ui/CodeRevisionView.php';
  56. $wgAutoloadClasses['CodeAuthorListView'] = $dir . 'ui/CodeAuthorListView.php';
  57. $wgAutoloadClasses['CodeStatusListView'] = $dir . 'ui/CodeStatusListView.php';
  58. $wgAutoloadClasses['CodeTagListView'] = $dir . 'ui/CodeTagListView.php';
  59. $wgAutoloadClasses['CodeCommentsListView'] = $dir . 'ui/CodeCommentsListView.php';
  60. $wgAutoloadClasses['CodeReleaseNotes'] = $dir . 'ui/CodeReleaseNotes.php';
  61. $wgAutoloadClasses['CodeStatusChangeListView'] = $dir . 'ui/CodeStatusChangeListView.php';
  62. $wgAutoloadClasses['SpecialCode'] = $dir . 'ui/SpecialCode.php';
  63. $wgAutoloadClasses['CodeView'] = $dir . 'ui/SpecialCode.php';
  64. $wgAutoloadClasses['SpecialRepoAdmin'] = $dir . 'ui/SpecialRepoAdmin.php';
  65. $wgSpecialPages['Code'] = 'SpecialCode';
  66. $wgSpecialPageGroups['Code'] = 'developer';
  67. $wgSpecialPages['RepoAdmin'] = 'SpecialRepoAdmin';
  68. $wgSpecialPageGroups['RepoAdmin'] = 'developer';
  69. $wgAPIModules['codeupdate'] = 'ApiCodeUpdate';
  70. $wgAPIModules['codediff'] = 'ApiCodeDiff';
  71. $wgAPIListModules['codecomments'] = 'ApiCodeComments';
  72. $wgAPIListModules['coderevisions'] = 'ApiCodeRevisions';
  73. $wgExtensionMessagesFiles['CodeReview'] = $dir . 'CodeReview.i18n.php';
  74. $wgExtensionAliasesFiles['CodeReview'] = $dir . 'CodeReview.alias.php';
  75. $wgAvailableRights[] = 'repoadmin';
  76. $wgAvailableRights[] = 'codereview-use';
  77. $wgAvailableRights[] = 'codereview-add-tag';
  78. $wgAvailableRights[] = 'codereview-remove-tag';
  79. $wgAvailableRights[] = 'codereview-post-comment';
  80. $wgAvailableRights[] = 'codereview-set-status';
  81. $wgAvailableRights[] = 'codereview-signoff';
  82. $wgAvailableRights[] = 'codereview-link-user';
  83. $wgGroupPermissions['*']['codereview-use'] = true;
  84. $wgGroupPermissions['user']['codereview-add-tag'] = true;
  85. $wgGroupPermissions['user']['codereview-remove-tag'] = true;
  86. $wgGroupPermissions['user']['codereview-post-comment'] = true;
  87. $wgGroupPermissions['user']['codereview-set-status'] = true;
  88. $wgGroupPermissions['user']['codereview-link-user'] = true;
  89. $wgGroupPermissions['user']['codereview-signoff'] = true;
  90. $wgGroupPermissions['steward']['repoadmin'] = true; // temp
  91. // If you can't directly access the remote SVN repo, you can set this
  92. // to an offsite proxy running this fun little proxy tool:
  93. // http://svn.wikimedia.org/viewvc/mediawiki/trunk/tools/codereview-proxy/
  94. $wgSubversionProxy = false;
  95. $wgSubversionProxyTimeout = 30; // default 3 secs is too short :)
  96. // Command-line options to pass on SVN command line if SVN PECL extension
  97. // isn't available and we're not using the proxy.
  98. // Defaults here should allow working with both http: and https: repos
  99. // as long as authentication isn't required.
  100. $wgSubversionOptions = "--non-interactive --trust-server-cert";
  101. // What is the default SVN import chunk size?
  102. $wgCodeReviewImportBatchSize = 400;
  103. // Bump the version number every time you change a CodeReview .css/.js file
  104. $wgCodeReviewStyleVersion = 6;
  105. // The name of a repo which represents the code running on this wiki, used to highlight active revisions
  106. $wgWikiSVN = '';
  107. // If you are running a closed svn, fill the following two lines with the username and password
  108. // of a user allowed to access it. Otherwise, leave it false.
  109. // This is only necessary if using the shell method to access Subversion
  110. $wgSubversionUser = false;
  111. $wgSubversionPassword = false;
  112. // Leave this off by default until it works right
  113. $wgCodeReviewENotif = false;
  114. // Set this to an e-mail list to send all comments to
  115. $wgCodeReviewCommentWatcher = false;
  116. // What images can be used for client-side side-by-side comparisons?
  117. $wgCodeReviewImgRegex = '/\.(png|jpg|jpeg|gif)$/i';
  118. /**
  119. * Maximum size of diff text before it is omitted from the revision view
  120. */
  121. $wgCodeReviewMaxDiffSize = 500000;
  122. /**
  123. * Key is repository name. Value is an array of regexes
  124. *
  125. * Any base paths matching regular expressions in these arrays will have their
  126. * default status set to deferred instead of new. Helpful if you've got a part
  127. * of the repository you don't care about.
  128. */
  129. $wgCodeReviewDeferredPaths = array();
  130. /**
  131. * UDP comment and status changes notification
  132. */
  133. $wgCodeReviewUDPAddress = false;
  134. $wgCodeReviewUDPPort = false;
  135. $wgCodeReviewUDPPrefix = '';
  136. # Schema changes
  137. $wgHooks['LoadExtensionSchemaUpdates'][] = 'efCodeReviewSchemaUpdates';
  138. function efCodeReviewSchemaUpdates( $updater ) {
  139. $base = dirname( __FILE__ );
  140. switch ( $updater->getDB()->getType() ) {
  141. case 'mysql':
  142. $updater->addExtensionUpdate( array( 'addTable', 'code_rev', "$base/codereview.sql", true ) ); // Initial install tables
  143. $updater->addExtensionUpdate( array( 'addField', 'code_rev', 'cr_diff', "$base/archives/codereview-cr_diff.sql", true ) );
  144. $updater->addExtensionUpdate( array( 'addIndex', 'code_relations', 'repo_to_from', "$base/archives/code_relations_index.sql", true ) );
  145. if ( !$updater->updateRowExists( 'make cr_status varchar' ) ) {
  146. $updater->addExtensionUpdate( array( 'modifyField', 'code_rev', 'cr_status', "$base/archives/codereview-cr_status_varchar.sql", true ) );
  147. }
  148. $updater->addExtensionUpdate( array( 'addTable', 'code_bugs', "$base/archives/code_bugs.sql", true ) );
  149. $updater->addExtensionUpdate( array( 'addTable', 'code_signoffs', "$base/archives/code_signoffs.sql", true ) );
  150. break;
  151. case 'sqlite':
  152. $updater->addExtensionUpdate( array( 'addTable', 'code_rev', "$base/codereview.sql", true ) );
  153. $updater->addExtensionUpdate( array( 'addTable', 'code_signoffs', "$base/archives/code_signoffs.sql", true ) );
  154. break;
  155. case 'postgres':
  156. // TODO
  157. break;
  158. }
  159. return true;
  160. }
  161. # Unit tests
  162. $wgHooks['UnitTestsList'][] = 'efCodeReviewUnitTests';
  163. function efCodeReviewUnitTests( &$files ) {
  164. $files[] = dirname( __FILE__ ) . '/tests/CodeReviewTest.php';
  165. return true;
  166. }