Changeset 7734 for sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-reports/classes/report/class-wordcamp-status.php
- Timestamp:
- 10/16/2018 05:30:06 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-reports/classes/report/class-wordcamp-status.php
r7588 r7734 10 10 use DateTime; 11 11 use WP_Error, WP_Post; 12 use function WordCamp\Reports\{get_ assets_url, get_assets_dir_path, get_views_dir_path};12 use function WordCamp\Reports\{get_views_dir_path}; 13 13 use WordCamp\Reports\Utility\Date_Range; 14 14 use function WordCamp\Reports\Validation\{validate_date_range, validate_wordcamp_status}; 15 use function WordCamp\Reports\Time\{year_array, quarter_array, month_array , convert_time_period_to_date_range};15 use function WordCamp\Reports\Time\{year_array, quarter_array, month_array}; 16 16 use WordCamp_Loader; 17 17 use WordCamp\Utilities\Export_CSV; … … 24 24 * @package WordCamp\Reports\Report 25 25 */ 26 class WordCamp_Status extends Base {26 class WordCamp_Status extends Base_Status { 27 27 /** 28 28 * Report name. … … 223 223 224 224 $latest_log = end( $logs ); 225 $latest_status = $this->get_log_status_result( $latest_log );225 $latest_status = $this->get_log_status_result( $latest_log, WordCamp_Loader::get_post_statuses() ); 226 226 reset( $logs ); 227 227 … … 349 349 * @return array 350 350 */ 351 protected function get_wordcamp_status_logs( WP_Post $wordcamp ) { 352 $log_entries = get_post_meta( $wordcamp->ID, '_status_change' ); 353 354 if ( ! empty( $log_entries ) ) { 355 // Sort log entries in chronological order. 356 usort( $log_entries, function( $a, $b ) { 357 if ( $a['timestamp'] === $b['timestamp'] ) { 358 return 0; 359 } 360 361 return ( $a['timestamp'] > $b['timestamp'] ) ? 1 : -1; 362 } ); 363 364 return $log_entries; 365 } 366 367 return array(); 368 } 369 370 /** 371 * Determine the ending status of a particular status change event. 372 * 373 * E.g. for this event: 374 * 375 * Needs Vetting → More Info Requested 376 * 377 * The ending status would be "More Info Requested". 378 * 379 * @param array $log_entry A status change log entry. 380 * 381 * @return string 382 */ 383 protected function get_log_status_result( $log_entry ) { 384 if ( isset( $log_entry['message'] ) ) { 385 $pieces = explode( ' → ', $log_entry['message'] ); 386 387 if ( isset( $pieces[1] ) ) { 388 return $this->get_status_id_from_name( $pieces[1] ); 389 } 390 } 391 392 return ''; 393 } 394 395 /** 396 * Given the ID of a WordCamp status, determine the ID string. 397 * 398 * @param string $status_name A WordCamp status name. 399 * 400 * @return string 401 */ 402 protected function get_status_id_from_name( $status_name ) { 403 $statuses = array_flip( WordCamp_Loader::get_post_statuses() ); 404 405 if ( isset( $statuses[ $status_name ] ) ) { 406 return $statuses[ $status_name ]; 407 } 408 409 return ''; 351 protected function get_wordcamp_status_logs( \WP_Post $wordcamp ) { 352 return $this->sort_logs( get_post_meta( $wordcamp->ID, '_status_change' ) ); 410 353 } 411 354 … … 447 390 448 391 /** 449 * Register all assets used by this report. 392 * Determine whether to render the public report form. 393 * 394 * This shortcode is limited to use on pages. 395 * 396 * @return string HTML content to display shortcode. 397 */ 398 public static function handle_shortcode() { 399 $html = ''; 400 401 if ( 'page' === get_post_type() ) { 402 self::register_assets(); 403 404 wp_enqueue_style( 'select2' ); 405 wp_enqueue_script( self::$slug ); 406 407 ob_start(); 408 self::render_public_page(); 409 $html = ob_get_clean(); 410 } 411 412 return $html; 413 } 414 415 /** 416 * Render the page for this report on the front end. 450 417 * 451 418 * @return void 452 419 */ 453 protected static function register_assets() { 454 wp_register_script( 455 self::$slug, 456 get_assets_url() . 'js/' . self::$slug . '.js', 457 array( 'jquery', 'select2' ), 458 filemtime( get_assets_dir_path() . 'js/' . self::$slug . '.js' ), 459 true 460 ); 461 462 wp_register_style( 463 self::$slug, 464 get_assets_url() . 'css/' . self::$slug . '.css', 465 array( 'select2' ), 466 filemtime( get_assets_dir_path() . 'css/' . self::$slug . '.css' ), 467 'screen' 468 ); 469 } 470 471 /** 472 * Enqueue JS and CSS assets for this report's admin interface. 473 * 474 * @return void 475 */ 476 public static function enqueue_admin_assets() { 477 self::register_assets(); 478 WordCamp_Details::register_assets(); 479 480 wp_enqueue_style( WordCamp_Details::$slug ); 481 wp_enqueue_script( self::$slug ); 482 wp_enqueue_style( self::$slug ); 420 public static function render_public_page() { 421 $params = self::parse_public_report_input(); 422 $years = year_array( absint( date( 'Y' ) ), 2015 ); 423 $quarters = quarter_array(); 424 $months = month_array(); 425 $statuses = WordCamp_Loader::get_post_statuses(); 426 427 $error = $params['error']; 428 $report = null; 429 $period = $params['period']; 430 $year = $params['year']; 431 $status = $params['status']; 432 if ( ! empty( $params ) && isset( $params['range'] ) ) { 433 $report = new self( $params['range']->start, $params['range']->end, $params['status'], $params['options'] ); 434 } 435 436 include get_views_dir_path() . 'public/wordcamp-status.php'; 483 437 } 484 438 … … 619 573 } 620 574 621 /** 622 * Determine whether to render the public report form. 623 * 624 * This shortcode is limited to use on pages. 625 * 626 * @return string HTML content to display shortcode. 627 */ 628 public static function handle_shortcode() { 629 $html = ''; 630 631 if ( 'page' === get_post_type() ) { 632 self::register_assets(); 633 634 wp_enqueue_style( 'select2' ); 635 wp_enqueue_script( self::$slug ); 636 637 ob_start(); 638 self::render_public_page(); 639 $html = ob_get_clean(); 640 } 641 642 return $html; 643 } 644 645 /** 646 * Render the page for this report on the front end. 647 * 648 * @return void 649 */ 650 public static function render_public_page() { 651 // Apparently 'year' is a reserved URL parameter on the front end, so we prepend 'report-'. 652 $year = filter_input( INPUT_GET, 'report-year', FILTER_VALIDATE_INT ); 653 $period = filter_input( INPUT_GET, 'period' ); 654 $status = filter_input( INPUT_GET, 'status' ); 655 $action = filter_input( INPUT_GET, 'action' ); 656 657 $years = year_array( absint( date( 'Y' ) ), 2015 ); 658 $quarters = quarter_array(); 659 $months = month_array(); 660 $statuses = WordCamp_Loader::get_post_statuses(); 661 662 if ( ! $year ) { 663 $year = absint( date( 'Y' ) ); 664 } 665 666 if ( ! $period ) { 667 $period = absint( date( 'm' ) ); 668 } 669 670 $report = null; 671 672 if ( 'Show results' === $action ) { 673 try { 674 $range = convert_time_period_to_date_range( $year, $period ); 675 } catch ( Exception $e ) { 676 $error = new WP_Error( 677 self::$slug . '-time-period-error', 678 $e->getMessage() 679 ); 680 } 681 682 $options = array( 683 'earliest_start' => new DateTime( '2015-01-01' ), // No status log data before 2015. 684 ); 685 686 $report = new self( $range->start, $range->end, $status, $options ); 687 } 688 689 include get_views_dir_path() . 'public/wordcamp-status.php'; 690 } 575 static public function get_report_object( $date_range, $status, $options ) { 576 return new self( $date_range->start, $date_range->end, $status, $options ); 577 } 578 691 579 }
Note: See TracChangeset
for help on using the changeset viewer.