Index: trunk/extensions/ArticleFeedbackv5/sql/ArticleFeedbackv5.sql |
— | — | @@ -35,15 +35,14 @@ |
36 | 36 | -- Creation timetamp |
37 | 37 | af_created binary(14) NOT NULL DEFAULT '', |
38 | 38 | -- Number of times the feedback was hidden or marked as abusive. |
39 | | - -- or flagged as helpful or unhelpful, or "deleted"/marked for oversight. |
| 39 | + -- or flagged as helpful or unhelpful. |
40 | 40 | af_abuse_count integer unsigned NOT NULL DEFAULT 0, |
41 | | - af_hide_count integer unsigned NOT NULL DEFAULT 0, |
42 | | - af_delete_count integer unsigned NOT NULL DEFAULT 0, |
43 | 41 | af_helpful_count integer unsigned NOT NULL DEFAULT 0, |
44 | 42 | af_unhelpful_count integer unsigned NOT NULL DEFAULT 0, |
45 | | - -- Flag a message as requiring oversight |
46 | | - af_needs_oversight boolean NOT NULL DEFAULT FALSE |
47 | | - |
| 43 | + -- Flag a message as requiring oversight, being hidden ,or being deleted |
| 44 | + af_needs_oversight boolean NOT NULL DEFAULT FALSE, |
| 45 | + af_is_deleted boolean NOT NULL DEFAULT FALSE, |
| 46 | + af_is_hidden boolean NOT NULL DEFAULT FALSE |
48 | 47 | ) /*$wgDBTableOptions*/; |
49 | 48 | CREATE INDEX /*i*/af_page_user_token_id ON /*_*/aft_article_feedback (af_page_id, af_user_id, af_user_anon_token, af_id); |
50 | 49 | CREATE INDEX /*i*/af_revision_id ON /*_*/aft_article_feedback (af_revision_id); |
Index: trunk/extensions/ArticleFeedbackv5/sql/alter.sql |
— | — | @@ -105,3 +105,7 @@ |
106 | 106 | SELECT afrr_page_id, afrr_field_id, SUM(afrr_total), SUM(afrr_count) |
107 | 107 | FROM aft_article_revision_feedback_ratings_rollup |
108 | 108 | GROUP BY afrr_page_id; |
| 109 | + |
| 110 | +-- Added 1/27 (greg) |
| 111 | +ALTER TABLE aft_article_feedback CHANGE COLUMN af_delete_count af_is_deleted BOOLEAN NOT NULL DEFAULT FALSE; |
| 112 | +ALTER TABLE aft_article_feedback CHANGE COLUMN af_hide_count af_is_hidden BOOLEAN NOT NULL DEFAULT FALSE; |
Index: trunk/extensions/ArticleFeedbackv5/api/ApiFlagFeedbackArticleFeedbackv5.php |
— | — | @@ -27,60 +27,56 @@ |
28 | 28 | $flag = $params['flagtype']; |
29 | 29 | $direction = isset( $params['direction'] ) ? $params['direction'] : 'increase'; |
30 | 30 | $counts = array( 'increment' => array(), 'decrement' => array() ); |
31 | | - $flags = array( 'abuse', 'hide', 'helpful', 'unhelpful', 'delete' ); |
| 31 | + $counters = array( 'abuse', 'helpful', 'unhelpful' ); |
| 32 | + $flags = array( 'oversight', 'hide', 'delete' ); |
32 | 33 | $results = array(); |
33 | 34 | $helpful = null; |
34 | 35 | $error = null; |
| 36 | + $where = array( 'af_id' => $params['feedbackid'] ); |
35 | 37 | |
36 | 38 | # load feedback record, bail if we don't have one |
37 | 39 | $record = $this->fetchRecord( $params['feedbackid'] ); |
38 | 40 | |
39 | | - if ( !$record->af_id ) { |
| 41 | + if ( $record === false || !$record->af_id ) { |
40 | 42 | // no-op, because this is already broken |
41 | 43 | $error = 'articlefeedbackv5-invalid-feedback-id'; |
42 | | - } elseif ( $params['flagtype'] == 'unhide' ) { |
43 | | - if( $direction == 'increase' ) { |
44 | | - // remove the hidden status |
45 | | - $update[] = 'af_hide_count = 0'; |
46 | | - } else { |
47 | | - // or set one |
48 | | - $update[] = 'af_hide_count = 1'; |
| 44 | + } elseif ( in_array( $params['flagtype'], $flags ) ) { |
| 45 | + switch( $params['flagtype'] ) { |
| 46 | + case 'hide': $field = 'af_is_hidden'; break; |
| 47 | + case 'oversight': $field = 'af_needs_oversight'; break; |
| 48 | + case 'delete': $field = 'af_is_deleted'; break; |
| 49 | + default: return; # return error, ideally. |
49 | 50 | } |
50 | | - } elseif ( $params['flagtype'] == 'unoversight' ) { |
| 51 | + |
51 | 52 | if( $direction == 'increase' ) { |
52 | | - // remove the oversight flag |
53 | | - $update[] = 'af_needs_oversight = FALSE'; |
| 53 | + $update[] = "$field = TRUE"; |
54 | 54 | } else { |
55 | | - // or set one |
56 | | - $update[] = 'af_needs_oversight = TRUE'; |
57 | | - } |
58 | | - } elseif ( $params['flagtype'] == 'undelete' ) { |
59 | | - if( $direction == 'increase' ) { |
60 | | - // remove the deleted status, and clear oversight flag |
61 | | - $update[] = 'af_delete_count = 0'; |
62 | | - $update[] = 'af_needs_oversight = FALSE'; |
63 | | - } else { |
64 | | - // add deleted status and oversight flag |
65 | | - $update[] = 'af_delete_count = 1'; |
66 | | - $update[] = 'af_needs_oversight = TRUE'; |
67 | | - } |
68 | | - } elseif ( $params['flagtype'] == 'oversight' ) { |
69 | | - if( $direction == 'increase' ) { |
70 | | - // flag for oversight |
71 | | - $update[] = 'af_needs_oversight = TRUE'; |
72 | | - } else { |
73 | | - // remove flag for oversight |
74 | | - $update[] = 'af_needs_oversight = FALSE'; |
75 | | - } |
76 | | - } elseif ( in_array( $params['flagtype'], $flags ) ) { |
| 55 | + $update[] = "$field = FALSE"; |
| 56 | + } |
| 57 | + } elseif ( in_array( $params['flagtype'], $counters ) ) { |
77 | 58 | // Probably this doesn't need validation, since the API |
78 | 59 | // will handle it, but if it's getting interpolated into |
79 | 60 | // the SQL, I'm really wary not re-validating it. |
80 | 61 | $field = 'af_' . $params['flagtype'] . '_count'; |
| 62 | + |
| 63 | + // Add another where condition to confirm that |
| 64 | + // the new flag value is at or above 0 (we use |
| 65 | + // unsigned ints, so negatives cause errors. |
| 66 | + |
81 | 67 | if( $direction == 'increase' ) { |
82 | 68 | $update[] = "$field = $field + 1"; |
| 69 | + // If this is already less than 0, |
| 70 | + // don't do anything - it'll just |
| 71 | + // throw a SQL error, so don't bother. |
| 72 | + // Incrementing from 0 is still valid. |
| 73 | + $where[] = "$field >= 0"; |
83 | 74 | } else { |
84 | 75 | $update[] = "$field = $field - 1"; |
| 76 | + // If this is already 0 or less, |
| 77 | + // don't decrement it, that would |
| 78 | + // throw an error. |
| 79 | + // Decrementing from 0 is not allowed. |
| 80 | + $where[] = "$field > 0"; |
85 | 81 | } |
86 | 82 | } else { |
87 | 83 | $error = 'articlefeedbackv5-invalid-feedback-flag'; |
— | — | @@ -100,7 +96,7 @@ |
101 | 97 | |
102 | 98 | |
103 | 99 | // Newly hidden record |
104 | | - if ( $flag == 'hide' && $record->af_hide_count == 0 ) { |
| 100 | + if ( $flag == 'hide' && $record->af_is_hidden == 0 ) { |
105 | 101 | $counts['increment'][] = 'invisible'; |
106 | 102 | $counts['decrement'][] = 'visible'; |
107 | 103 | } |
— | — | @@ -111,7 +107,7 @@ |
112 | 108 | } |
113 | 109 | |
114 | 110 | // Newly deleted record |
115 | | - if ( $flag == 'delete' && $record->af_delete_count == 0 ) { |
| 111 | + if ( $flag == 'delete' && $record->af_is_deleted == 0 ) { |
116 | 112 | $counts['increment'][] = 'deleted'; |
117 | 113 | $counts['decrement'][] = 'visible'; |
118 | 114 | } |
— | — | @@ -136,7 +132,7 @@ |
137 | 133 | $dbw->update( |
138 | 134 | 'aft_article_feedback', |
139 | 135 | $update, |
140 | | - array( 'af_id' => $params['feedbackid'] ), |
| 136 | + $where, |
141 | 137 | __METHOD__ |
142 | 138 | ); |
143 | 139 | |
— | — | @@ -182,7 +178,7 @@ |
183 | 179 | if( $record->af_abuse_count >= $wgArticleFeedbackv5HideAbuseThreshold ) { |
184 | 180 | $dbw->update( |
185 | 181 | 'aft_article_feedback', |
186 | | - array( 'af_hide_count = af_hide_count + 1' ), |
| 182 | + array( 'af_is_hidden = af_is_hidden + 1' ), |
187 | 183 | array( 'af_id' => $params['feedbackid'] ), |
188 | 184 | __METHOD__ |
189 | 185 | ); |
— | — | @@ -210,7 +206,7 @@ |
211 | 207 | $dbr = wfGetDB( DB_SLAVE ); |
212 | 208 | $record = $dbr->selectRow( |
213 | 209 | 'aft_article_feedback', |
214 | | - array( 'af_id', 'af_abuse_count', 'af_hide_count', 'af_helpful_count', 'af_unhelpful_count', 'af_delete_count' ), |
| 210 | + array( 'af_id', 'af_abuse_count', 'af_is_hidden', 'af_helpful_count', 'af_unhelpful_count', 'af_is_deleted' ), |
215 | 211 | array( 'af_id' => $id ) |
216 | 212 | ); |
217 | 213 | return $record; |
Index: trunk/extensions/ArticleFeedbackv5/api/ApiViewFeedbackArticleFeedbackv5.php |
— | — | @@ -73,13 +73,13 @@ |
74 | 74 | return $count ? $count : 0; |
75 | 75 | } |
76 | 76 | |
77 | | - public function fetchFeedback( $pageId, |
78 | | - $filter = 'visible', $filterValue = null, $sort = 'age', $sortOrder = 'desc', $limit = 25, $continue = null ) { |
| 77 | + public function fetchFeedback( $pageId, $filter = 'visible', |
| 78 | + $filterValue = null, $sort = 'age', $sortOrder = 'desc', |
| 79 | + $limit = 25, $continue = null ) { |
79 | 80 | $dbr = wfGetDB( DB_SLAVE ); |
80 | 81 | $ids = array(); |
81 | 82 | $rows = array(); |
82 | 83 | $rv = array(); |
83 | | - $where = $this->getFilterCriteria( $filter, $filterValue ); |
84 | 84 | |
85 | 85 | $direction = strtolower( $sortOrder ) == 'asc' ? 'ASC' : 'DESC'; |
86 | 86 | $continueDirection = ( $direction == 'ASC' ? '>' : '<' ); |
— | — | @@ -87,6 +87,21 @@ |
88 | 88 | $continueSql; |
89 | 89 | $sortField; |
90 | 90 | |
| 91 | + $ratingField = 0; |
| 92 | + $commentField = 0; |
| 93 | + // This is in memcache so I don't feel that bad re-fetching it. |
| 94 | + // Needed to join in the comment and rating tables, for filtering |
| 95 | + // and sorting, respectively. |
| 96 | + foreach( ApiArticleFeedbackv5Utils::getFields() as $field ) { |
| 97 | + if( $field['afi_bucket_id'] == 1 && $field['afi_name'] == 'comment' ) { |
| 98 | + $commentField = $field['afi_id']; |
| 99 | + } |
| 100 | + if( $field['afi_bucket_id'] == 1 && $field['afi_name'] == 'found' ) { |
| 101 | + $ratingField = $field['afi_id']; |
| 102 | + } |
| 103 | + } |
| 104 | + |
| 105 | + // Build ORDER BY clause. |
91 | 106 | switch( $sort ) { |
92 | 107 | case 'helpful': |
93 | 108 | $sortField = 'net_helpfulness'; |
— | — | @@ -94,10 +109,8 @@ |
95 | 110 | $continueSql = "CONVERT(af_helpful_count, SIGNED) - CONVERT(af_unhelpful_count, SIGNED) $continueDirection"; |
96 | 111 | break; |
97 | 112 | case 'rating': |
98 | | -# TODO |
99 | | -# disable because it's broken |
100 | | -# $sortField = 'rating'; |
101 | | -# break; |
| 113 | + $sortField = 'rating'; |
| 114 | + break; |
102 | 115 | case 'age': |
103 | 116 | # Default field, fall through |
104 | 117 | default: |
— | — | @@ -107,40 +120,52 @@ |
108 | 121 | } |
109 | 122 | $order = "$sortField $direction"; |
110 | 123 | |
| 124 | + // Build WHERE clause. |
| 125 | + // Filter applied , if any: |
| 126 | + $where = $this->getFilterCriteria( $filter, $filterValue ); |
| 127 | + // PageID: |
111 | 128 | $where['af_page_id'] = $pageId; |
112 | | - |
113 | | - # This join is needed for the comment filter. |
114 | | - $where[] = 'af_id = aa_feedback_id'; |
115 | | - |
| 129 | + // Continue value, if any: |
116 | 130 | if ( $continue !== null ) { |
117 | 131 | $where[] = $continueSql.' '.intVal( $continue ); |
118 | 132 | } |
119 | | - |
120 | | - # This filter is per Fabrice, 1/25 - only show feedback from option 1 |
| 133 | + // Only show bucket 1 (per Fabrice on 1/25) |
121 | 134 | $where['af_bucket_id'] = 1; |
122 | 135 | |
| 136 | + // Fetch the feedback IDs we need. |
123 | 137 | /* I'd really love to do this in one big query, but MySQL |
124 | 138 | doesn't support LIMIT inside IN() subselects, and since |
125 | 139 | we don't know the number of answers for each feedback |
126 | 140 | record until we fetch them, this is the only way to make |
127 | 141 | sure we get all answers for the exact IDs we want. */ |
128 | 142 | $id_query = $dbr->select( |
129 | | - array( |
| 143 | + array( |
130 | 144 | 'aft_article_feedback', |
131 | | - 'aft_article_answer' |
| 145 | + 'rating' => 'aft_article_answer', |
| 146 | + 'comment' => 'aft_article_answer', |
132 | 147 | ), |
133 | 148 | array( |
134 | | - 'DISTINCT af_id', |
135 | | - 'CONVERT(af_helpful_count, SIGNED) - CONVERT(af_unhelpful_count, SIGNED) AS net_helpfulness' |
| 149 | + 'af_id', |
| 150 | + 'CONVERT(af_helpful_count, SIGNED) - CONVERT(af_unhelpful_count, SIGNED) AS net_helpfulness', |
| 151 | + 'rating.aa_response_boolean AS rating' |
136 | 152 | ), |
137 | 153 | $where, |
138 | 154 | __METHOD__, |
139 | 155 | array( |
140 | 156 | 'LIMIT' => $limit, |
141 | 157 | 'ORDER BY' => $order |
| 158 | + ), |
| 159 | + array( |
| 160 | + 'rating' => array( |
| 161 | + 'LEFT JOIN', |
| 162 | + 'rating.aa_feedback_id = af_id AND rating.aa_field_id = '.intval( $ratingField ) |
| 163 | + ), |
| 164 | + 'comment' => array( |
| 165 | + 'LEFT JOIN', |
| 166 | + 'comment.aa_feedback_id = af_id AND comment.aa_field_id = '.intval( $commentField ) |
| 167 | + ) |
142 | 168 | ) |
143 | 169 | ); |
144 | | - |
145 | 170 | foreach ( $id_query as $id ) { |
146 | 171 | $ids[] = $id->af_id; |
147 | 172 | $this->continue = $id->$sortField; |
— | — | @@ -151,40 +176,47 @@ |
152 | 177 | } |
153 | 178 | |
154 | 179 | $rows = $dbr->select( |
155 | | - array( 'aft_article_feedback', 'aft_article_answer', |
156 | | - 'aft_article_field', 'aft_article_field_option', |
157 | | - 'user', 'page' |
| 180 | + array( 'aft_article_feedback', |
| 181 | + 'rating' => 'aft_article_answer', |
| 182 | + 'answer' => 'aft_article_answer', |
| 183 | + 'aft_article_field', |
| 184 | + 'aft_article_field_option', 'user', 'page' |
158 | 185 | ), |
159 | 186 | array( 'af_id', 'af_bucket_id', 'afi_name', 'afo_name', |
160 | | - 'aa_response_text', 'aa_response_boolean', |
161 | | - 'aa_response_rating', 'aa_response_option_id', |
| 187 | + 'answer.aa_response_text', 'answer.aa_response_boolean', |
| 188 | + 'answer.aa_response_rating', 'answer.aa_response_option_id', |
162 | 189 | 'afi_data_type', 'af_created', 'user_name', |
163 | | - 'af_user_ip', 'af_hide_count', 'af_abuse_count', |
| 190 | + 'af_user_ip', 'af_is_hidden', 'af_abuse_count', |
164 | 191 | 'af_helpful_count', 'af_unhelpful_count', |
165 | | - 'af_delete_count', 'af_needs_oversight', |
| 192 | + 'af_is_deleted', 'af_needs_oversight', |
166 | 193 | '(SELECT COUNT(*) FROM ' . $dbr->tableName( 'revision' ) . ' WHERE rev_id > af_revision_id AND rev_page = ' . ( integer ) $pageId . ') AS age', |
167 | 194 | 'CONVERT(af_helpful_count, SIGNED) - CONVERT(af_unhelpful_count, SIGNED) AS net_helpfulness', |
168 | | - 'page_latest', 'af_revision_id', 'page_title' |
| 195 | + 'page_latest', 'af_revision_id', 'page_title', |
| 196 | + 'rating.aa_response_boolean AS rating' |
169 | 197 | ), |
170 | 198 | array( 'af_id' => $ids ), |
171 | 199 | __METHOD__, |
172 | 200 | array( 'ORDER BY' => $order ), |
173 | 201 | array( |
174 | | - 'page' => array( |
175 | | - 'JOIN', 'page_id = af_page_id' |
| 202 | + 'rating' => array( |
| 203 | + 'LEFT JOIN', |
| 204 | + 'rating.aa_feedback_id = af_id AND rating.aa_field_id = '.intval( $ratingField ) |
| 205 | + ), |
| 206 | + 'answer' => array( |
| 207 | + 'LEFT JOIN', 'af_id = answer.aa_feedback_id' |
176 | 208 | ), |
177 | | - 'user' => array( |
178 | | - 'LEFT JOIN', 'user_id = af_user_id' |
179 | | - ), |
180 | 209 | 'aft_article_field' => array( |
181 | | - 'LEFT JOIN', 'afi_id = aa_field_id' |
| 210 | + 'LEFT JOIN', 'afi_id = answer.aa_field_id' |
182 | 211 | ), |
183 | | - 'aft_article_answer' => array( |
184 | | - 'LEFT JOIN', 'af_id = aa_feedback_id' |
185 | | - ), |
186 | 212 | 'aft_article_field_option' => array( |
187 | 213 | 'LEFT JOIN', |
188 | | - 'aa_response_option_id = afo_option_id' |
| 214 | + 'answer.aa_response_option_id = afo_option_id' |
| 215 | + ), |
| 216 | + 'user' => array( |
| 217 | + 'LEFT JOIN', 'user_id = af_user_id' |
| 218 | + ), |
| 219 | + 'page' => array( |
| 220 | + 'JOIN', 'page_id = af_page_id' |
189 | 221 | ) |
190 | 222 | ) |
191 | 223 | ); |
— | — | @@ -218,12 +250,12 @@ |
219 | 251 | |
220 | 252 | // Don't let non-allowed users see these. |
221 | 253 | if ( !$wgUser->isAllowed( 'aftv5-see-hidden-feedback' ) ) { |
222 | | - $where['af_hide_count'] = 0; |
| 254 | + $where['af_is_hidden'] = 0; |
223 | 255 | } |
224 | 256 | |
225 | 257 | // Don't let non-allowed users see these. |
226 | 258 | if ( !$wgUser->isAllowed( 'aftv5-see-deleted-feedback' ) ) { |
227 | | - $where['af_delete_count'] = 0; |
| 259 | + $where['af_is_deleted'] = 0; |
228 | 260 | } |
229 | 261 | |
230 | 262 | switch( $filter ) { |
— | — | @@ -234,22 +266,12 @@ |
235 | 267 | # Used for permalinks. |
236 | 268 | $where['af_id'] = $filterValue; |
237 | 269 | break; |
238 | | - case 'all': |
239 | | - # relies on the above to handler filtering, |
240 | | - # because 'all' doesn't mean thhe same thing |
241 | | - # at all access levels. |
242 | | - # oversight, real 'all' - no filtering done |
243 | | - # non-oversight 'all' - no deleted feedback |
244 | | - # non-moderator 'all' - no hidden/deleted |
245 | | - break; |
246 | 270 | case 'visible': |
247 | | - # For oversights/sysops to see what normal |
248 | | - # people see. |
249 | | - $where['af_delete_count'] = 0; |
250 | | - $where['af_hide_count'] = 0; |
| 271 | + $where['af_is_deleted'] = 0; |
| 272 | + $where['af_is_hidden'] = 0; |
251 | 273 | break; |
252 | 274 | case 'invisible': |
253 | | - $where[] = 'af_hide_count > 0'; |
| 275 | + $where[] = 'af_is_hidden > 0'; |
254 | 276 | break; |
255 | 277 | case 'abusive': |
256 | 278 | $where[] = 'af_abuse_count > 0'; |
— | — | @@ -261,10 +283,10 @@ |
262 | 284 | $where[] = 'CONVERT(af_helpful_count, SIGNED) - CONVERT(af_unhelpful_count, SIGNED) < 0'; |
263 | 285 | break; |
264 | 286 | case 'comment': |
265 | | - $where[] = 'aa_response_text IS NOT NULL'; |
| 287 | + $where[] = 'comment.aa_response_text IS NOT NULL'; |
266 | 288 | break; |
267 | 289 | case 'deleted': |
268 | | - $where[] = 'af_delete_count > 0'; |
| 290 | + $where[] = 'af_is_deleted > 0'; |
269 | 291 | break; |
270 | 292 | default: |
271 | 293 | break; |
— | — | @@ -404,7 +426,7 @@ |
405 | 427 | |
406 | 428 | if ( $can_hide ) { |
407 | 429 | $link = 'hide'; |
408 | | - if ( $record[0]->af_hide_count > 0 ) { |
| 430 | + if ( $record[0]->af_is_hidden > 0 ) { |
409 | 431 | # unhide |
410 | 432 | $link = 'unhide'; |
411 | 433 | $tools .= Html::element( 'li', array(), wfMessage( 'articlefeedbackv5-hidden' ) ); |
— | — | @@ -412,19 +434,19 @@ |
413 | 435 | $tools .= Html::rawElement( 'li', array(), Html::element( 'a', array( |
414 | 436 | 'id' => "articleFeedbackv5-$link-link-$id", |
415 | 437 | 'class' => "articleFeedbackv5-$link-link" |
416 | | - ), wfMessage( "articlefeedbackv5-form-$link", $record[0]->af_hide_count )->text() ) ); |
| 438 | + ), wfMessage( "articlefeedbackv5-form-$link", $record[0]->af_is_hidden )->text() ) ); |
417 | 439 | } |
418 | 440 | |
419 | 441 | if ( $can_delete ) { |
420 | 442 | # delete |
421 | 443 | $link = 'delete'; |
422 | | - if ( $record[0]->af_delete_count > 0 ) { |
| 444 | + if ( $record[0]->af_is_deleted > 0 ) { |
423 | 445 | $link = 'undelete'; |
424 | 446 | } |
425 | 447 | $tools .= Html::rawElement( 'li', array(), Html::element( 'a', array( |
426 | 448 | 'id' => "articleFeedbackv5-$link-link-$id", |
427 | 449 | 'class' => "articleFeedbackv5-$link-link" |
428 | | - ), wfMessage( "articlefeedbackv5-form-$link", $record[0]->af_delete_count )->text() ) ); |
| 450 | + ), wfMessage( "articlefeedbackv5-form-$link", $record[0]->af_is_deleted )->text() ) ); |
429 | 451 | } |
430 | 452 | |
431 | 453 | /* |
— | — | @@ -444,7 +466,7 @@ |
445 | 467 | $tools .= Html::rawElement( 'li', array(), Html::element( 'a', array( |
446 | 468 | 'id' => "articleFeedbackv5-$link-link-$id", |
447 | 469 | 'class' => "articleFeedbackv5-$link-link" |
448 | | - ), wfMessage( "articlefeedbackv5-form-$link", $record[0]->af_delete_count )->text() ) ); |
| 470 | + ), wfMessage( "articlefeedbackv5-form-$link", $record[0]->af_is_deleted )->text() ) ); |
449 | 471 | } |
450 | 472 | */ |
451 | 473 | |