Changeset 14103
- Timestamp:
- 10/09/2024 10:22:13 PM (4 months ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/photo-directory
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/photo-directory/assets/css/admin.css
r14101 r14103 158 158 overflow-wrap: anywhere; 159 159 } 160 161 #dashboard-photo-rejection-stats .col-num { 162 width: 50px; 163 } 164 #dashboard-photo-rejection-stats .row-sum { 165 font-weight: bold; 166 } 167 #dashboard-photo-rejection-stats .row-sum td { 168 border-top: 1px solid #c3c4c7; 169 } -
sites/trunk/wordpress.org/public_html/wp-content/plugins/photo-directory/inc/rejection.php
r14056 r14103 169 169 // Use JS to inject rejected post status into post submit box. 170 170 add_action( 'admin_footer', [ __CLASS__, 'output_js_to_modify_post_status_in_submitbox_dropdown' ] ); 171 172 // Register dashboard widget. 173 add_action( 'wp_dashboard_setup', [ __CLASS__, 'dashboard_setup' ] ); 171 174 } 172 175 … … 311 314 * is the specific attribute of the reason to return. 312 315 * Empty string returns all data for reason. Default ''. 316 * @param bool $include_approval Optional. Should the approval entry (which is 317 * technically not a rejection) be included? Default false. 313 318 * @return array|string 314 319 */ 315 public static function get_rejection_reasons( $reason = '', $field = '' ) {320 public static function get_rejection_reasons( $reason = '', $field = '', $include_approval = false ) { 316 321 // Return all reasons if one wasn't specified. 317 322 if ( ! $reason ) { 318 323 $reasons = self::$rejection_reasons; 324 if ( ! $include_approval ) { 325 unset( $reasons[''] ); 326 } 319 327 uasort( $reasons, function( $a, $b ) { 320 328 return strcmp( $a['label'], $b['label'] ); … … 367 375 368 376 return $rejection_reason; 377 } 378 379 /** 380 * Returns a count of rejections for each rejection reason. 381 * 382 * @return array Associate array of rejection reason keys and their respective rejection counts. 383 */ 384 public static function count_rejections_per_reason() { 385 global $wpdb; 386 387 $reasons = self::get_rejection_reasons(); 388 $reasons_keys = array_keys( $reasons ); 389 390 $results = $wpdb->get_results( $wpdb->prepare( 391 "SELECT meta_value AS rejection_reason, COUNT(*) AS count FROM $wpdb->postmeta WHERE meta_key = %s GROUP BY meta_value", 392 'rejected_reason' 393 ) ); 394 395 $return = []; 396 foreach ( $results as $row ) { 397 $return[ $row->rejection_reason ] = $row->count; 398 } 399 400 return $return; 369 401 } 370 402 … … 982 1014 disabled( true, $is_disabled, false ) 983 1015 ); 984 foreach ( self::get_rejection_reasons( ) as $reason => $args ) {1016 foreach ( self::get_rejection_reasons( '', '', true ) as $reason => $args ) { 985 1017 printf( 986 1018 '<option value="%s"%s>%s</option>' . "\n", … … 1304 1336 } 1305 1337 1338 /** 1339 * Registers the admin dashboard. 1340 */ 1341 public static function dashboard_setup() { 1342 if ( current_user_can( 'edit_photos' ) ) { 1343 wp_add_dashboard_widget( 1344 'dashboard_photo_rejections', 1345 __( 'Rejection Stats', 'wporg-photos' ), 1346 [ __CLASS__, 'dashboard_photo_rejections' ], 1347 null, 1348 null, 1349 'column3' 1350 ); 1351 } 1352 } 1353 1354 /** 1355 * Outputs the photo rejection stats dashboard widget. 1356 */ 1357 public static function dashboard_photo_rejections() { 1358 echo '<div class="main">'; 1359 1360 // Get list of all rejection types. 1361 $rejection_reasons = self::get_rejection_reasons(); 1362 ksort( $rejection_reasons ); 1363 $rejection_reasons_counts = self::count_rejections_per_reason(); 1364 1365 // Omit submission errors since they aren't true rejections. 1366 unset( $rejection_reasons['submission-error'] ); 1367 unset( $rejection_reasons_counts['submission-error'] ); 1368 1369 echo '<table id="dashboard-photo-rejection-stats" class="wp-list-table widefat fixed striped table-view-list">'; 1370 echo '<thead><tr>'; 1371 echo '<th>' . __( 'Rejection reason', 'wporg-photos' ) . '</th>'; 1372 echo '<th class="col-num col-num-rejected" title="' . esc_attr__( 'Number of photos rejected', 'wporg-photos' ) . '"><span class="dashicons dashicons-thumbs-down"></span></th>'; 1373 echo '<th class="col-num col-percent-rejected" title="' . esc_attr( 'Percentage of overall rejections', 'wporg-photos' ) . '">%</th>'; 1374 echo '</tr></thead>'; 1375 echo '<tbody>'; 1376 1377 $total_rejections = array_sum( $rejection_reasons_counts ); 1378 1379 foreach ( $rejection_reasons as $reason => $data ) { 1380 $data['count'] = $rejection_reasons_counts[ $reason ]; 1381 1382 echo '<tr>'; 1383 echo '<td title="' . esc_attr( $data['label'] ) . '">' . esc_html( $reason ) . '</td>'; 1384 echo '<td>' . number_format_i18n( $data['count'] ) . '</td>'; 1385 echo '<td>' . round( ( $data['count'] / $total_rejections ) * 100, 2 ) . '%</td>'; 1386 echo "</tr>\n"; 1387 } 1388 1389 echo '<tr class="row-sum"><td>' . __( 'Total', 'wporg-photos' ) . '</td><td>' . number_format_i18n( $total_rejections ) . '</td><td>100%</td></tr>'; 1390 echo '</tbody></table>'; 1391 echo '</div>'; 1392 } 1393 1306 1394 } 1307 1395
Note: See TracChangeset
for help on using the changeset viewer.