r93074 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r93073‎ | r93074 | r93075 >
Date:17:39, 25 July 2011
Author:reedy
Status:ok
Tags:
Comment:
svn:eol-style native for r93073
Modified paths:
  • /branches/wmf/1.17wmf1/extensions/CodeReview/api/ApiQueryCodePaths.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CodeReview/api/ApiQueryCodeTags.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CodeReview/archives/codereview-repopath.sql (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CodeReview/modules/ext.codereview.overview.css (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CodeReview/modules/ext.codereview.overview.js (modified) (history)

Diff [purge]

Property changes on: branches/wmf/1.17wmf1/extensions/CodeReview/archives/codereview-repopath.sql
___________________________________________________________________
Added: svn:eol-style
11 + native
Index: branches/wmf/1.17wmf1/extensions/CodeReview/modules/ext.codereview.overview.css
@@ -1,46 +1,46 @@
2 -#overviewmap {
3 - border: 1px solid #2F6FAB;
4 - padding: 2px;
5 - min-width: 300px;
6 -}
7 -#overviewpop {
8 - padding: 3px;
9 - border: 1px solid black;
10 - position: absolute;
11 - height: 6.5em;
12 - width: 16em;
13 - display: none;
14 - background-color: #ffffdd;
15 - font-size: 80%;
16 - line-height: 100%;
17 - overflow: hidden;
18 - white-space: pre;
19 -}
20 -#overviewmap > a {
21 - display: block;
22 - border: 1px solid #888;
23 - float: left;
24 - width: 26px; /* 26px for body + 2px for border + 2px for margin = 30px total */
25 - height: 26px;
26 - margin: 1px;
27 - overflow: hidden;
28 -}
29 -#overviewmap > a:target {
30 - border-style: dashed;
31 -}
32 -#overviewmap .summary {
33 - clear: both;
34 -}
35 -
36 -table.TablePager tr:target {
37 - font-weight: bold;
38 -}
39 -
40 -.overview-backlink {
41 - clear:both;
42 - display: none;
43 -}
44 -
45 -tr:target .overview-backlink {
46 - display: inline;
 2+#overviewmap {
 3+ border: 1px solid #2F6FAB;
 4+ padding: 2px;
 5+ min-width: 300px;
 6+}
 7+#overviewpop {
 8+ padding: 3px;
 9+ border: 1px solid black;
 10+ position: absolute;
 11+ height: 6.5em;
 12+ width: 16em;
 13+ display: none;
 14+ background-color: #ffffdd;
 15+ font-size: 80%;
 16+ line-height: 100%;
 17+ overflow: hidden;
 18+ white-space: pre;
 19+}
 20+#overviewmap > a {
 21+ display: block;
 22+ border: 1px solid #888;
 23+ float: left;
 24+ width: 26px; /* 26px for body + 2px for border + 2px for margin = 30px total */
 25+ height: 26px;
 26+ margin: 1px;
 27+ overflow: hidden;
 28+}
 29+#overviewmap > a:target {
 30+ border-style: dashed;
 31+}
 32+#overviewmap .summary {
 33+ clear: both;
 34+}
 35+
 36+table.TablePager tr:target {
 37+ font-weight: bold;
 38+}
 39+
 40+.overview-backlink {
 41+ clear:both;
 42+ display: none;
 43+}
 44+
 45+tr:target .overview-backlink {
 46+ display: inline;
4747 }
\ No newline at end of file
Property changes on: branches/wmf/1.17wmf1/extensions/CodeReview/modules/ext.codereview.overview.css
___________________________________________________________________
Added: svn:eol-style
4848 + native
Index: branches/wmf/1.17wmf1/extensions/CodeReview/modules/ext.codereview.overview.js
@@ -1,131 +1,131 @@
2 -/* Scap roadmap viewer, version [0.0.7]
3 - * Originally from: http://www.mediawiki.org/wiki/User:Splarka/scapmap.js
4 - *
5 - *
6 - * Loads on, for example: http://www.mediawiki.org/wiki/Special:Code/MediaWiki
7 - * Click [overview] to generate map.
8 - * Text in the "path" input box is stripped from the path line in the summary.
9 - * Clicking a colored box takes you to that relevant line, and a backlink is created in the id column on focus.
10 - * Hovering over a colored box pops up a little info packet box.
11 - */
12 -jQuery( function( $ ) {
13 - // check if we're on a page with a useful list of revisions
14 - if( $( '#path' ).size() && $('table.TablePager').size() ) {
15 - var portlet = $( '#p-namespaces' ).size() ? 'p-namespaces' : 'p-cactions';
16 - mw.util.addPortletLink(
17 - portlet,
18 - '#',
19 - mw.msg( 'codereview-overview-title' ),
20 - 'ca-scapmap',
21 - mw.msg( 'codereview-overview-desc' )
22 - );
23 - }
24 -
25 - $('#ca-scapmap').click( function () {
26 - var $tr = $('table.TablePager tr');
27 - if( $tr.size() < 2 ){
28 - return;
29 - } else if( $('#overviewmap').size() ) {
30 - // We've already created it; maybe they just want to toggle it on and off
31 - $('#overviewmap').slideToggle();
32 - return;
33 - }
34 -
35 - var overviewPopupData = {};
36 -
37 - $( '#contentSub' ).after( $( '<div id="overviewmap">' ) );
38 - $( '#overviewmap' ).slideUp( 0 );
39 -
40 - var vpath = $( '#path' ).val();
41 - var totals = {};
42 - $tr.each( function( i ){
43 - var status = false;
44 -
45 - var trc = $(this).attr( 'class' );
46 - if( !trc || !trc.length ) {
47 - return;
48 - } else {
49 - trc = trc.split( ' ' );
50 - }
51 - for( var j = 0; j < trc.length; j++ ) {
52 - if( trc[j].substring( 0, 21 ) == 'mw-codereview-status-' ) {
53 - status = trc[j].substring( 21 );
54 - }
55 - }
56 - var $td = $( 'td', $(this) );
57 -
58 - var statusname = $td.filter( '.TablePager_col_cr_status' ).text();
59 -
60 - if( !statusname || !status ) {
61 - return;
62 - }
63 -
64 - var rev = $td.filter( '.TablePager_col_cr_id, .TablePager_col_cp_rev_id' ).text();
65 - overviewPopupData[i] = {
66 - 'status' : status,
67 - 'statusname' : statusname,
68 - 'notes' : $td.filter( '.TablePager_col_comments' ).text(),
69 - 'author' : $td.filter( '.TablePager_col_cr_author' ).text(),
70 - 'rev' : rev
71 - };
72 -
73 - var path = $td.filter( '.TablePager_col_cr_path' ).text();
74 - if( path && path.indexOf( vpath ) == 0 && path != vpath && vpath != '' ) {
75 - path = '\u2026' + path.substring( vpath.length );
76 - }
77 - overviewPopupData[i]['path'] = path;
78 -
79 - if( !totals[statusname] ) {
80 - totals[statusname] = 0;
81 - }
82 - totals[statusname]++;
83 -
84 - $(this).attr( 'id', 'TablePager-row-' + rev );
85 -
86 - $td.filter( '.TablePager_col_selectforchange' )
87 - .append( $( '<a href="#box-' + i + '" class="overview-backlink">^</a>' ) );
88 -
89 - var $box = $( '<a href="#TablePager-row-' + rev + '" class="mw-codereview-status-' + status + '" id="box-' + i + '"> </a>' );
90 - $( '#overviewmap' ).append( $box );
91 - });
92 -
93 - var sumtext = [];
94 - for( var i in totals ) {
95 - if( typeof i != 'string' || typeof totals[i] != 'number' ) {
96 - continue;
97 - }
98 - sumtext.push( i + ': ' + totals[i] );
99 - }
100 - sumtext.sort();
101 - var $summary = $( '<div class="summary">' )
102 - .text( 'Total revisions: ' + ( $tr.size() - 1 ) + '. [' + sumtext.join(', ') + ']' );
103 -
104 - $( '#overviewmap' )
105 - .append( $summary )
106 - .css( 'max-width', Math.floor( Math.sqrt( $tr.size() ) ) * 30 )
107 - .slideDown();
108 -
109 - // Add the hover popup
110 - $( '#overviewmap > a' )
111 - .mouseenter( function () {
112 -
113 - var $el = $( this );
114 - if ( $el.data('overviewPopup') ) {
115 - return; // already processed
116 - }
117 - $el.tipsy( { fade: true, gravity: 'sw', html:true } );
118 - var id = parseInt( $(this).attr( 'id' ).replace( /box\-/i, '' ) );
119 -
120 - var $popup = $( '<div id="overviewpop">' +
121 - '<div>Rev: r<span id="overviewpop-rev">' + overviewPopupData[id]['rev'] +
122 - '</span> (<span id="overviewpop-status">' + overviewPopupData[id]['status'] + '</span>)</div>' +
123 - '<div>Number of notes: <span id="overviewpop-notes">' + overviewPopupData[id]['notes'] + '</span></div>' +
124 - '<div>Path: <span id="overviewpop-path">' + overviewPopupData[id]['path'] + '</span></div>' +
125 - '<div>Author: <span id="overviewpop-author">' + overviewPopupData[id]['author'] + '</span></div>' +
126 - '</div>')
127 - $el.attr( 'title', $popup.html() );
128 - $el.data( 'codeTooltip', true );
129 - $el.tipsy( 'show' );
130 - });
131 - });
132 -} );
 2+/* Scap roadmap viewer, version [0.0.7]
 3+ * Originally from: http://www.mediawiki.org/wiki/User:Splarka/scapmap.js
 4+ *
 5+ *
 6+ * Loads on, for example: http://www.mediawiki.org/wiki/Special:Code/MediaWiki
 7+ * Click [overview] to generate map.
 8+ * Text in the "path" input box is stripped from the path line in the summary.
 9+ * Clicking a colored box takes you to that relevant line, and a backlink is created in the id column on focus.
 10+ * Hovering over a colored box pops up a little info packet box.
 11+ */
 12+jQuery( function( $ ) {
 13+ // check if we're on a page with a useful list of revisions
 14+ if( $( '#path' ).size() && $('table.TablePager').size() ) {
 15+ var portlet = $( '#p-namespaces' ).size() ? 'p-namespaces' : 'p-cactions';
 16+ mw.util.addPortletLink(
 17+ portlet,
 18+ '#',
 19+ mw.msg( 'codereview-overview-title' ),
 20+ 'ca-scapmap',
 21+ mw.msg( 'codereview-overview-desc' )
 22+ );
 23+ }
 24+
 25+ $('#ca-scapmap').click( function () {
 26+ var $tr = $('table.TablePager tr');
 27+ if( $tr.size() < 2 ){
 28+ return;
 29+ } else if( $('#overviewmap').size() ) {
 30+ // We've already created it; maybe they just want to toggle it on and off
 31+ $('#overviewmap').slideToggle();
 32+ return;
 33+ }
 34+
 35+ var overviewPopupData = {};
 36+
 37+ $( '#contentSub' ).after( $( '<div id="overviewmap">' ) );
 38+ $( '#overviewmap' ).slideUp( 0 );
 39+
 40+ var vpath = $( '#path' ).val();
 41+ var totals = {};
 42+ $tr.each( function( i ){
 43+ var status = false;
 44+
 45+ var trc = $(this).attr( 'class' );
 46+ if( !trc || !trc.length ) {
 47+ return;
 48+ } else {
 49+ trc = trc.split( ' ' );
 50+ }
 51+ for( var j = 0; j < trc.length; j++ ) {
 52+ if( trc[j].substring( 0, 21 ) == 'mw-codereview-status-' ) {
 53+ status = trc[j].substring( 21 );
 54+ }
 55+ }
 56+ var $td = $( 'td', $(this) );
 57+
 58+ var statusname = $td.filter( '.TablePager_col_cr_status' ).text();
 59+
 60+ if( !statusname || !status ) {
 61+ return;
 62+ }
 63+
 64+ var rev = $td.filter( '.TablePager_col_cr_id, .TablePager_col_cp_rev_id' ).text();
 65+ overviewPopupData[i] = {
 66+ 'status' : status,
 67+ 'statusname' : statusname,
 68+ 'notes' : $td.filter( '.TablePager_col_comments' ).text(),
 69+ 'author' : $td.filter( '.TablePager_col_cr_author' ).text(),
 70+ 'rev' : rev
 71+ };
 72+
 73+ var path = $td.filter( '.TablePager_col_cr_path' ).text();
 74+ if( path && path.indexOf( vpath ) == 0 && path != vpath && vpath != '' ) {
 75+ path = '\u2026' + path.substring( vpath.length );
 76+ }
 77+ overviewPopupData[i]['path'] = path;
 78+
 79+ if( !totals[statusname] ) {
 80+ totals[statusname] = 0;
 81+ }
 82+ totals[statusname]++;
 83+
 84+ $(this).attr( 'id', 'TablePager-row-' + rev );
 85+
 86+ $td.filter( '.TablePager_col_selectforchange' )
 87+ .append( $( '<a href="#box-' + i + '" class="overview-backlink">^</a>' ) );
 88+
 89+ var $box = $( '<a href="#TablePager-row-' + rev + '" class="mw-codereview-status-' + status + '" id="box-' + i + '"> </a>' );
 90+ $( '#overviewmap' ).append( $box );
 91+ });
 92+
 93+ var sumtext = [];
 94+ for( var i in totals ) {
 95+ if( typeof i != 'string' || typeof totals[i] != 'number' ) {
 96+ continue;
 97+ }
 98+ sumtext.push( i + ': ' + totals[i] );
 99+ }
 100+ sumtext.sort();
 101+ var $summary = $( '<div class="summary">' )
 102+ .text( 'Total revisions: ' + ( $tr.size() - 1 ) + '. [' + sumtext.join(', ') + ']' );
 103+
 104+ $( '#overviewmap' )
 105+ .append( $summary )
 106+ .css( 'max-width', Math.floor( Math.sqrt( $tr.size() ) ) * 30 )
 107+ .slideDown();
 108+
 109+ // Add the hover popup
 110+ $( '#overviewmap > a' )
 111+ .mouseenter( function () {
 112+
 113+ var $el = $( this );
 114+ if ( $el.data('overviewPopup') ) {
 115+ return; // already processed
 116+ }
 117+ $el.tipsy( { fade: true, gravity: 'sw', html:true } );
 118+ var id = parseInt( $(this).attr( 'id' ).replace( /box\-/i, '' ) );
 119+
 120+ var $popup = $( '<div id="overviewpop">' +
 121+ '<div>Rev: r<span id="overviewpop-rev">' + overviewPopupData[id]['rev'] +
 122+ '</span> (<span id="overviewpop-status">' + overviewPopupData[id]['status'] + '</span>)</div>' +
 123+ '<div>Number of notes: <span id="overviewpop-notes">' + overviewPopupData[id]['notes'] + '</span></div>' +
 124+ '<div>Path: <span id="overviewpop-path">' + overviewPopupData[id]['path'] + '</span></div>' +
 125+ '<div>Author: <span id="overviewpop-author">' + overviewPopupData[id]['author'] + '</span></div>' +
 126+ '</div>')
 127+ $el.attr( 'title', $popup.html() );
 128+ $el.data( 'codeTooltip', true );
 129+ $el.tipsy( 'show' );
 130+ });
 131+ });
 132+} );
Property changes on: branches/wmf/1.17wmf1/extensions/CodeReview/modules/ext.codereview.overview.js
___________________________________________________________________
Added: svn:eol-style
133133 + native
Index: branches/wmf/1.17wmf1/extensions/CodeReview/api/ApiQueryCodeTags.php
@@ -1,88 +1,88 @@
2 -<?php
3 -
4 -/**
5 - * Created on 20 April 2011
6 - *
7 - * This program is free software; you can redistribute it and/or modify
8 - * it under the terms of the GNU General Public License as published by
9 - * the Free Software Foundation; either version 2 of the License, or
10 - * (at your option) any later version.
11 - *
12 - * This program is distributed in the hope that it will be useful,
13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 - * GNU General Public License for more details.
16 - *
17 - * You should have received a copy of the GNU General Public License along
18 - * with this program; if not, write to the Free Software Foundation, Inc.,
19 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 - * http://www.gnu.org/copyleft/gpl.html
21 - */
22 -
23 -class ApiQueryCodeTags extends ApiQueryBase {
24 - public function __construct( $query, $moduleName ) {
25 - parent::__construct( $query, $moduleName, 'ct' );
26 - }
27 -
28 - public function execute() {
29 - global $wgUser;
30 - // Before doing anything at all, let's check permissions
31 - if ( !$wgUser->isAllowed( 'codereview-use' ) ) {
32 - $this->dieUsage( 'You don\'t have permission to view code tags', 'permissiondenied' );
33 - }
34 - $params = $this->extractRequestParams();
35 -
36 - $repo = CodeRepository::newFromName( $params['repo'] );
37 - if ( !$repo instanceof CodeRepository ) {
38 - $this->dieUsage( "Invalid repo ``{$params['repo']}''", 'invalidrepo' );
39 - }
40 -
41 - $data = array();
42 - foreach ( $repo->getTagList( true ) as $tag => $count ) {
43 - $data[] = array(
44 - 'name' => $tag,
45 - 'revcount' => $count,
46 - );
47 - }
48 -
49 - $result = $this->getResult();
50 - $result->setIndexedTagName( $data, 'tag' );
51 - $result->addValue( 'query', $this->getModuleName(), $data );
52 - }
53 -
54 - public function getAllowedParams() {
55 - return array(
56 - 'repo' => array(
57 - ApiBase::PARAM_TYPE => 'string',
58 - ApiBase::PARAM_REQUIRED => true,
59 - ),
60 - );
61 - }
62 -
63 - public function getParamDescription() {
64 - return array(
65 - 'repo' => 'Name of the repository',
66 - );
67 - }
68 -
69 - public function getDescription() {
70 - return 'Get a list of tags applied to revisions in a given repository';
71 - }
72 -
73 - public function getPossibleErrors() {
74 - return array_merge( parent::getPossibleErrors(), array(
75 - array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view code tags' ),
76 - array( 'code' => 'invalidrepo', 'info' => "Invalid repo ``repo''" ),
77 - ) );
78 - }
79 -
80 - public function getExamples() {
81 - return array(
82 - 'api.php?action=query&list=codetags&ctrepo=MediaWiki',
83 - );
84 - }
85 -
86 - public function getVersion() {
87 - return __CLASS__ . ': $Id: ApiQueryCodeTags.php 86711 2011-04-22 14:30:46Z reedy $';
88 - }
89 -}
 2+<?php
 3+
 4+/**
 5+ * Created on 20 April 2011
 6+ *
 7+ * This program is free software; you can redistribute it and/or modify
 8+ * it under the terms of the GNU General Public License as published by
 9+ * the Free Software Foundation; either version 2 of the License, or
 10+ * (at your option) any later version.
 11+ *
 12+ * This program is distributed in the hope that it will be useful,
 13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15+ * GNU General Public License for more details.
 16+ *
 17+ * You should have received a copy of the GNU General Public License along
 18+ * with this program; if not, write to the Free Software Foundation, Inc.,
 19+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 20+ * http://www.gnu.org/copyleft/gpl.html
 21+ */
 22+
 23+class ApiQueryCodeTags extends ApiQueryBase {
 24+ public function __construct( $query, $moduleName ) {
 25+ parent::__construct( $query, $moduleName, 'ct' );
 26+ }
 27+
 28+ public function execute() {
 29+ global $wgUser;
 30+ // Before doing anything at all, let's check permissions
 31+ if ( !$wgUser->isAllowed( 'codereview-use' ) ) {
 32+ $this->dieUsage( 'You don\'t have permission to view code tags', 'permissiondenied' );
 33+ }
 34+ $params = $this->extractRequestParams();
 35+
 36+ $repo = CodeRepository::newFromName( $params['repo'] );
 37+ if ( !$repo instanceof CodeRepository ) {
 38+ $this->dieUsage( "Invalid repo ``{$params['repo']}''", 'invalidrepo' );
 39+ }
 40+
 41+ $data = array();
 42+ foreach ( $repo->getTagList( true ) as $tag => $count ) {
 43+ $data[] = array(
 44+ 'name' => $tag,
 45+ 'revcount' => $count,
 46+ );
 47+ }
 48+
 49+ $result = $this->getResult();
 50+ $result->setIndexedTagName( $data, 'tag' );
 51+ $result->addValue( 'query', $this->getModuleName(), $data );
 52+ }
 53+
 54+ public function getAllowedParams() {
 55+ return array(
 56+ 'repo' => array(
 57+ ApiBase::PARAM_TYPE => 'string',
 58+ ApiBase::PARAM_REQUIRED => true,
 59+ ),
 60+ );
 61+ }
 62+
 63+ public function getParamDescription() {
 64+ return array(
 65+ 'repo' => 'Name of the repository',
 66+ );
 67+ }
 68+
 69+ public function getDescription() {
 70+ return 'Get a list of tags applied to revisions in a given repository';
 71+ }
 72+
 73+ public function getPossibleErrors() {
 74+ return array_merge( parent::getPossibleErrors(), array(
 75+ array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view code tags' ),
 76+ array( 'code' => 'invalidrepo', 'info' => "Invalid repo ``repo''" ),
 77+ ) );
 78+ }
 79+
 80+ public function getExamples() {
 81+ return array(
 82+ 'api.php?action=query&list=codetags&ctrepo=MediaWiki',
 83+ );
 84+ }
 85+
 86+ public function getVersion() {
 87+ return __CLASS__ . ': $Id: ApiQueryCodeTags.php 86711 2011-04-22 14:30:46Z reedy $';
 88+ }
 89+}
Property changes on: branches/wmf/1.17wmf1/extensions/CodeReview/api/ApiQueryCodeTags.php
___________________________________________________________________
Added: svn:eol-style
9090 + native
Index: branches/wmf/1.17wmf1/extensions/CodeReview/api/ApiQueryCodePaths.php
@@ -1,106 +1,106 @@
2 -<?php
3 -
4 -/**
5 - * Created on 6th June 2011
6 - *
7 - * This program is free software; you can redistribute it and/or modify
8 - * it under the terms of the GNU General Public License as published by
9 - * the Free Software Foundation; either version 2 of the License, or
10 - * (at your option) any later version.
11 - *
12 - * This program is distributed in the hope that it will be useful,
13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 - * GNU General Public License for more details.
16 - *
17 - * You should have received a copy of the GNU General Public License along
18 - * with this program; if not, write to the Free Software Foundation, Inc.,
19 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 - * http://www.gnu.org/copyleft/gpl.html
21 - */
22 -
23 -class ApiQueryCodePaths extends ApiQueryBase {
24 - public function __construct( $query, $moduleName ) {
25 - parent::__construct( $query, $moduleName, 'cp' );
26 - }
27 -
28 - public function execute() {
29 - global $wgUser;
30 - // Before doing anything at all, let's check permissions
31 - if ( !$wgUser->isAllowed( 'codereview-use' ) ) {
32 - $this->dieUsage( 'You don\'t have permission to view code paths', 'permissiondenied' );
33 - }
34 - $params = $this->extractRequestParams();
35 -
36 - $repo = CodeRepository::newFromName( $params['repo'] );
37 - if ( !$repo instanceof CodeRepository ) {
38 - $this->dieUsage( "Invalid repo ``{$params['repo']}''", 'invalidrepo' );
39 - }
40 -
41 - $this->addTables( 'code_paths' );
42 - $this->addFields( 'DISTINCT cp_path' );
43 - $this->addWhere( array( 'cp_repo_id' => $repo->getId() ) );
44 - $db = $this->getDB();
45 -
46 - $this->addWhere( 'cp_path ' . $db->buildLike( $params['path'], $db->anyString() ) );
47 - $this->addOption( 'USE INDEX', 'repo_path' );
48 -
49 - $this->addOption( 'LIMIT', 10 );
50 -
51 - $res = $this->select( __METHOD__ );
52 -
53 - $result = $this->getResult();
54 -
55 - $data = array();
56 -
57 - foreach ( $res as $row ) {
58 - $item = array();
59 - ApiResult::setContent( $item, $row->cp_path );
60 - $data[] = $item;
61 - }
62 -
63 - $result->setIndexedTagName( $data, 'paths' );
64 - $result->addValue( 'query', $this->getModuleName(), $data );
65 - }
66 -
67 - public function getAllowedParams() {
68 - return array(
69 - 'repo' => array(
70 - ApiBase::PARAM_TYPE => 'string',
71 - ApiBase::PARAM_REQUIRED => true,
72 - ),
73 - 'path' => array(
74 - ApiBase::PARAM_TYPE => 'string',
75 - ApiBase::PARAM_REQUIRED => true,
76 - ),
77 - );
78 - }
79 -
80 - public function getParamDescription() {
81 - return array(
82 - 'repo' => 'Name of the repository',
83 - 'path' => 'Path prefix to filter on',
84 - );
85 - }
86 -
87 - public function getDescription() {
88 - return 'Get a list of 10 paths in a given repository, based on the input path prefix';
89 - }
90 -
91 - public function getPossibleErrors() {
92 - return array_merge( parent::getPossibleErrors(), array(
93 - array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view code paths' ),
94 - array( 'code' => 'invalidrepo', 'info' => "Invalid repo ``repo''" ),
95 - ) );
96 - }
97 -
98 - public function getExamples() {
99 - return array(
100 - 'api.php?action=query&list=codepaths&cprepo=MediaWiki&cppath=/trunk/phase3',
101 - );
102 - }
103 -
104 - public function getVersion() {
105 - return __CLASS__ . ': $Id: ApiQueryCodePaths.php 89645 2011-06-07 13:43:31Z reedy $';
106 - }
107 -}
 2+<?php
 3+
 4+/**
 5+ * Created on 6th June 2011
 6+ *
 7+ * This program is free software; you can redistribute it and/or modify
 8+ * it under the terms of the GNU General Public License as published by
 9+ * the Free Software Foundation; either version 2 of the License, or
 10+ * (at your option) any later version.
 11+ *
 12+ * This program is distributed in the hope that it will be useful,
 13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15+ * GNU General Public License for more details.
 16+ *
 17+ * You should have received a copy of the GNU General Public License along
 18+ * with this program; if not, write to the Free Software Foundation, Inc.,
 19+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 20+ * http://www.gnu.org/copyleft/gpl.html
 21+ */
 22+
 23+class ApiQueryCodePaths extends ApiQueryBase {
 24+ public function __construct( $query, $moduleName ) {
 25+ parent::__construct( $query, $moduleName, 'cp' );
 26+ }
 27+
 28+ public function execute() {
 29+ global $wgUser;
 30+ // Before doing anything at all, let's check permissions
 31+ if ( !$wgUser->isAllowed( 'codereview-use' ) ) {
 32+ $this->dieUsage( 'You don\'t have permission to view code paths', 'permissiondenied' );
 33+ }
 34+ $params = $this->extractRequestParams();
 35+
 36+ $repo = CodeRepository::newFromName( $params['repo'] );
 37+ if ( !$repo instanceof CodeRepository ) {
 38+ $this->dieUsage( "Invalid repo ``{$params['repo']}''", 'invalidrepo' );
 39+ }
 40+
 41+ $this->addTables( 'code_paths' );
 42+ $this->addFields( 'DISTINCT cp_path' );
 43+ $this->addWhere( array( 'cp_repo_id' => $repo->getId() ) );
 44+ $db = $this->getDB();
 45+
 46+ $this->addWhere( 'cp_path ' . $db->buildLike( $params['path'], $db->anyString() ) );
 47+ $this->addOption( 'USE INDEX', 'repo_path' );
 48+
 49+ $this->addOption( 'LIMIT', 10 );
 50+
 51+ $res = $this->select( __METHOD__ );
 52+
 53+ $result = $this->getResult();
 54+
 55+ $data = array();
 56+
 57+ foreach ( $res as $row ) {
 58+ $item = array();
 59+ ApiResult::setContent( $item, $row->cp_path );
 60+ $data[] = $item;
 61+ }
 62+
 63+ $result->setIndexedTagName( $data, 'paths' );
 64+ $result->addValue( 'query', $this->getModuleName(), $data );
 65+ }
 66+
 67+ public function getAllowedParams() {
 68+ return array(
 69+ 'repo' => array(
 70+ ApiBase::PARAM_TYPE => 'string',
 71+ ApiBase::PARAM_REQUIRED => true,
 72+ ),
 73+ 'path' => array(
 74+ ApiBase::PARAM_TYPE => 'string',
 75+ ApiBase::PARAM_REQUIRED => true,
 76+ ),
 77+ );
 78+ }
 79+
 80+ public function getParamDescription() {
 81+ return array(
 82+ 'repo' => 'Name of the repository',
 83+ 'path' => 'Path prefix to filter on',
 84+ );
 85+ }
 86+
 87+ public function getDescription() {
 88+ return 'Get a list of 10 paths in a given repository, based on the input path prefix';
 89+ }
 90+
 91+ public function getPossibleErrors() {
 92+ return array_merge( parent::getPossibleErrors(), array(
 93+ array( 'code' => 'permissiondenied', 'info' => 'You don\'t have permission to view code paths' ),
 94+ array( 'code' => 'invalidrepo', 'info' => "Invalid repo ``repo''" ),
 95+ ) );
 96+ }
 97+
 98+ public function getExamples() {
 99+ return array(
 100+ 'api.php?action=query&list=codepaths&cprepo=MediaWiki&cppath=/trunk/phase3',
 101+ );
 102+ }
 103+
 104+ public function getVersion() {
 105+ return __CLASS__ . ': $Id: ApiQueryCodePaths.php 89645 2011-06-07 13:43:31Z reedy $';
 106+ }
 107+}
Property changes on: branches/wmf/1.17wmf1/extensions/CodeReview/api/ApiQueryCodePaths.php
___________________________________________________________________
Added: svn:eol-style
108108 + native

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r93072Merge CodeReview from trunk as of r93046demon17:28, 25 July 2011
r93073svn merge missed the adds? Stupid svn :(demon17:34, 25 July 2011

Status & tagging log