Changeset 11999 for trunk/src/bp-core/classes/class-bp-admin.php
- Timestamp:
- 04/27/2018 02:22:35 PM (8 years ago)
- File:
-
- 1 edited
-
trunk/src/bp-core/classes/class-bp-admin.php (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-core/classes/class-bp-admin.php
r11997 r11999 156 156 add_action( 'bp_register_admin_settings', array( $this, 'register_admin_settings' ) ); 157 157 158 // Add a link to BuddyPress About page tothe admin bar.159 add_action( 'admin_bar_menu', array( $this, 'admin_bar_about_link' ), 1 5);158 // Add a link to BuddyPress Hello in the admin bar. 159 add_action( 'admin_bar_menu', array( $this, 'admin_bar_about_link' ), 100 ); 160 160 161 161 // Add a description of new BuddyPress tools in the available tools page. … … 170 170 add_action( 'manage_' . bp_get_email_post_type() . '_posts_custom_column', array( $this, 'emails_display_situation_column_data' ), 10, 2 ); 171 171 172 // BuddyPress Hello. 173 add_action( 'admin_footer', array( $this, 'about_screen' ) ); 174 172 175 /* Filters ***********************************************************/ 173 176 … … 197 200 return; 198 201 } 199 200 // About.201 add_dashboard_page(202 __( 'Welcome to BuddyPress', 'buddypress' ),203 __( 'Welcome to BuddyPress', 'buddypress' ),204 'manage_options',205 'bp-about',206 array( $this, 'about_screen' )207 );208 209 // Credits.210 add_dashboard_page(211 __( 'Welcome to BuddyPress', 'buddypress' ),212 __( 'Welcome to BuddyPress', 'buddypress' ),213 'manage_options',214 'bp-credits',215 array( $this, 'credits_screen' )216 );217 202 218 203 $hooks = array(); … … 475 460 476 461 /** 477 * Add a link to BuddyPress About pageto the admin bar.462 * Add a link to BuddyPress Hello to the admin bar. 478 463 * 479 464 * @since 1.9.0 480 * 481 * @param WP_Admin_Bar $wp_admin_bar As passed to 'admin_bar_menu'. 465 * @since 3.0.0 Hooked at priority 100 (was 15). 466 * 467 * @param WP_Admin_Bar $wp_admin_bar 482 468 */ 483 469 public function admin_bar_about_link( $wp_admin_bar ) { 484 if ( is_user_logged_in() ) { 485 $wp_admin_bar->add_menu( array( 486 'parent' => 'wp-logo', 487 'id' => 'bp-about', 488 'title' => esc_html__( 'About BuddyPress', 'buddypress' ), 489 'href' => add_query_arg( array( 'page' => 'bp-about' ), bp_get_admin_url( 'index.php' ) ), 490 ) ); 491 } 470 if ( ! is_user_logged_in() ) { 471 return; 472 } 473 474 $wp_admin_bar->add_menu( array( 475 'parent' => 'wp-logo', 476 'id' => 'bp-about', 477 'title' => esc_html_x( 'Hello, BuddyPress!', 'Colloquial alternative to "learn about BuddyPress"', 'buddypress' ), 478 'href' => bp_get_admin_url( '?hello=buddypress' ), 479 'meta' => array( 480 'class' => 'say-hello-buddypress', 481 ), 482 ) ); 492 483 } 493 484 … … 511 502 return array_merge( $links, array( 512 503 'settings' => '<a href="' . esc_url( add_query_arg( array( 'page' => 'bp-components' ), bp_get_admin_url( $this->settings_page ) ) ) . '">' . esc_html__( 'Settings', 'buddypress' ) . '</a>', 513 'about' => '<a href="' . esc_url( add_query_arg( array( 'page' => 'bp-about' ), bp_get_admin_url( 'index.php' ) ) ) . '">' . esc_html__( 'About','buddypress' ) . '</a>'504 'about' => '<a href="' . esc_url( bp_get_admin_url( '?hello=buddypress' ) ) . '">' . esc_html_x( 'Hello, BuddyPress!', 'Colloquial alternative to "learn about BuddyPress"', 'buddypress' ) . '</a>' 514 505 ) ); 515 506 } … … 542 533 public function enqueue_scripts() { 543 534 wp_enqueue_style( 'bp-admin-common-css' ); 535 536 // BuddyPress Hello 537 if ( get_current_screen()->id === 'dashboard' && ! empty( $_GET['hello'] ) && $_GET['hello'] === 'buddypress' ) { 538 wp_enqueue_style( 'bp-hello-css' ); 539 wp_enqueue_script( 'bp-hello-js' ); 540 } 544 541 } 545 542 … … 547 544 548 545 /** 549 * Output the about screen. 550 * 551 * @since 1.7.0 546 * Output the BuddyPress Hello template. 547 * 548 * @since 1.7.0 Screen content. 549 * @since 3.0.0 Now outputs BuddyPress Hello template. 552 550 */ 553 551 public function about_screen() { 552 if ( get_current_screen()->id !== 'dashboard' || empty( $_GET['hello'] ) || $_GET['hello'] !== 'buddypress' ) { 553 return; 554 } 554 555 ?> 555 556 556 <div class="wrap about-wrap"> 557 558 <?php self::welcome_text(); ?> 559 560 <?php self::tab_navigation( __METHOD__ ); ?> 561 562 <?php if ( self::is_new_install() ) : ?> 563 564 <div id="welcome-panel" class="welcome-panel"> 565 <div class="welcome-panel-content"> 566 <h3 style="margin:0;"><?php _e( 'Getting Started with BuddyPress', 'buddypress' ); ?></h3> 567 <div class="welcome-panel-column-container"> 568 <div class="welcome-panel-column"> 569 <h4><?php _e( 'Configure BuddyPress', 'buddypress' ); ?></h4> 570 <ul> 571 <li><?php printf( 572 '<a href="%s" class="welcome-icon welcome-edit-page">' . __( 'Set Up Components', 'buddypress' ) . '</a>', esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) ) ) 573 ); ?></li> 574 <li><?php printf( 575 '<a href="%s" class="welcome-icon welcome-edit-page">' . __( 'Assign Components to Pages', 'buddypress' ) . '</a>', esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), $this->settings_page ) ) ) 576 ); ?></li> 577 <li><?php printf( 578 '<a href="%s" class="welcome-icon welcome-edit-page">' . __( 'Customize Settings', 'buddypress' ) . '</a>', esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-settings' ), $this->settings_page ) ) ) 579 ); ?></li> 580 </ul> 581 <a class="button button-primary button-hero" style="margin-bottom:20px;margin-top:0;" href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) ) ); ?>"><?php _e( 'Get Started', 'buddypress' ); ?></a> 582 </div> 583 <div class="welcome-panel-column"> 584 <h4><?php _e( 'Administration Tools', 'buddypress' ); ?></h4> 585 <ul> 586 <?php if ( bp_is_active( 'members' ) ) : ?> 587 <li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Add User Profile Fields', 'buddypress' ) . '</a>', esc_url( add_query_arg( array( 'page' => 'bp-profile-setup' ), bp_get_admin_url( 'users.php' ) ) ) ); ?></li> 588 <?php endif; ?> 589 <li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Manage User Signups', 'buddypress' ) . '</a>', esc_url( add_query_arg( array( 'page' => 'bp-signups' ), bp_get_admin_url( 'users.php' ) ) ) ); ?></li> 590 <?php if ( bp_is_active( 'activity' ) ) : ?> 591 <li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Moderate Activity Streams', 'buddypress' ) . '</a>', esc_url( add_query_arg( array( 'page' => 'bp-activity' ), bp_get_admin_url( 'admin.php' ) ) ) ); ?></li> 592 <?php endif; ?> 593 <?php if ( bp_is_active( 'groups' ) ) : ?> 594 <li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Manage Groups', 'buddypress' ) . '</a>', esc_url( add_query_arg( array( 'page' => 'bp-groups' ), bp_get_admin_url( 'admin.php' ) ) ) ); ?></li> 595 <?php endif; ?> 596 <li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Repair Data', 'buddypress' ) . '</a>', esc_url( add_query_arg( array( 'page' => 'bp-tools' ), bp_get_admin_url( 'tools.php' ) ) ) ); ?> 597 </li> 598 </ul> 599 </div> 600 <div class="welcome-panel-column welcome-panel-last"> 601 <h4><?php _e( 'Community and Support', 'buddypress' ); ?></h4> 602 <p class="welcome-icon welcome-learn-more" style="margin-right:10px"><?php _e( 'Looking for help? The <a href="https://codex.buddypress.org/">BuddyPress Codex</a> has you covered.', 'buddypress' ) ?></p> 603 <p class="welcome-icon welcome-learn-more" style="margin-right:10px"><?php _e( 'Can’t find what you need? Stop by <a href="https://buddypress.org/support/">our support forums</a>, where active BuddyPress users and developers are waiting to share tips and more.', 'buddypress' ) ?></p> 604 </div> 605 </div> 606 </div> 557 <div id="bp-hello-backdrop" style="display: none;"> 558 </div> 559 560 <div id="bp-hello-container" style="display: none;"> 561 <div class="bp-hello-header"> 562 <div class="bp-hello-close"> 563 <a class="close-modal" href="#" title="<?php echo esc_attr( 'Close pop-up', 'buddypress' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Close pop-up', 'buddypress' ); ?></span></a> 607 564 </div> 608 565 609 <?php endif; ?> 610 611 <div class="bp-features-section"> 612 613 <h3 class="headline-title"><?php esc_html_e( 'For Developers & Site Builders', 'buddypress' ); ?></h3> 614 615 <div class="bp-feature"> 616 <span class="dashicons dashicons-groups" aria-hidden="true"></span> 617 <h4 class="feature-title"><?php esc_html_e( 'Edit Group Slug', 'buddypress' ); ?></h4> 618 <p><?php esc_html_e( 'Allow administrators to change group names and permalinks. Navigate to the Groups screen in the wp-admin dashboard, click on the Edit link under the Group name, and adjust as needed.', 'buddypress' ); ?></p> 566 <div class="bp-hello-title"> 567 <h1><?php esc_html_e( _x( 'New in BuddyPress', 'section heading', 'buddypress' ) ); ?></h1> 619 568 </div> 620 621 <div class="bp-feature opposite"> 622 <span class="dashicons dashicons-admin-users" aria-hidden="true"></span> 623 <h4 class="feature-title"><?php esc_html_e( 'Improve accessibility of Extended Profile Fields', 'buddypress' ); ?></h4> 624 <p><?php esc_html_e( 'Related form fields are grouped together in fieldsets and all interactive form controls are associated with necessary ARIA states and properties.', 'buddypress' ); ?></p> 569 </div> 570 571 <div class="bp-hello-content"> 572 <h2><?php esc_html_e( __( 'Say hello to “Nouveau”!', 'buddypress' ) ); ?></h2> 573 <p> 574 <?php 575 printf( 576 __( 'A bold reimagining of our legacy templates, Nouveau is our celebration of <a href="%s">10 years of BuddyPress</a>! Nouveau delivers modern markup with fresh JavaScript-powered templates, and full integration with WordPress\' Customizer, allowing more out-of-the-box control of your BuddyPress content than ever before.', 'buddypress' ), 577 esc_url( 'https://buddypress.org/2018/03/10-years/' ) 578 ); 579 ?> 580 </p> 581 <p><?php esc_html_e( 'Nouveau provides vertical and horizontal layout options for BuddyPress navigation, and for the component directories, you can choose between a grid layout, and a classic flat list.', 'buddypress' ); ?></p> 582 <p> 583 <?php 584 printf( 585 __( 'Nouveau is fully compatible with WordPress. Existing BuddyPress themes have been written for our legacy template pack, and until they are updated, resolve any compatibility issues by choosing the legacy template pack option in <a href="%s">Settings > BuddyPress</a>.', 'buddypress' ), 586 esc_url( bp_get_admin_url( 'admin.php?page=bp-settings' ) ) 587 ); 588 ?> 589 </p> 590 <img srcset="https://via.placeholder.com/1024x576 1024w, https://via.placeholder.com/2048x1152 2048w" src="https://placekitten.com/1024x576" sizes="(max-width: 1023px) 90vw, 65vw" alt="a rad wolf" /> 591 592 <h2><?php esc_html_e( _x( 'Control site-wide notices from your dashboard', 'section heading', 'buddypress' ) ); ?></h2> 593 <p><?php esc_html_e( 'Site Notices are a feature within the Private Messaging component that allows community managers to share important messages with all members of their community. With Nouveau, the management interface for Site Notices has been removed from the front-end theme templates.', 'buddypress' ); ?></p> 594 595 <?php if ( bp_is_active( 'messages' ) ) : ?> 596 <p> 597 <?php 598 printf( 599 __( 'Explore the new management interface at <a href="%s">Users > Site Notices</a>.', 'buddypress' ), 600 esc_url( bp_get_admin_url( 'users.php?page=bp-notices' ) ) 601 ); 602 ?> 603 </p> 604 <?php endif; ?> 605 606 <h2><?php esc_html_e( __( 'New profile field type: telephone numbers', 'buddypress' ) ); ?></h2> 607 <p><?php esc_html_e( 'A new telephone number field type has been added to the Extended Profiles component, with support for all international number formats. With a modern web browser, your members can use this field type to touch-to-dial a number directly.', 'buddypress' ); ?></p> 608 609 <h2><?php esc_html_e( __( "BuddyPress: leaner, faster, stronger", 'buddypress' ) ); ?></h2> 610 <p><?php esc_html_e( 'With every BuddyPress version, we strive to make performance improvements alongside new features and fixes; this version is no exception. Memory use has been optimised — within active components, we now only load each individual code file when it\'s needed, not before.', 'buddypress' ); ?></p> 611 <p> 612 <?php 613 printf( 614 __( 'Most notably, the <a href="%s">Legacy Forums component has been removed</a> after 9 years of service. If your site was using Legacy Forums, you need to <a href="%s">migrate to the bbPress plugin</a>.', 'buddypress' ), 615 esc_url( 'https://bpdevel.wordpress.com/2017/12/07/legacy-forums-support-will-be/' ), 616 esc_url( 'https://codex.buddypress.org/getting-started/guides/migrating-from-old-forums-to-bbpress-2/' ) 617 ); 618 ?> 619 </p> 620 621 <p><em> 622 <?php 623 printf( 624 __( 'To read the full list of features, fixes, and changes in this version of BuddyPress, <a href="%s">visit Trac</a>.', 'buddypress' ), 625 esc_url( 'https://buddypress.trac.wordpress.org/query?group=status&milestone=3.0' ) 626 ); 627 ?> 628 </em></p> 629 630 <h2><?php esc_html_e( _x( 'Your feedback', 'screen heading', 'buddypress' ) ); ?></h2> 631 <p> 632 <?php 633 printf( 634 __( ' How are you using BuddyPress? Recieving your feedback and suggestions for future versions of BuddyPress genuinely motivates and encourages our contributors. Please <a href="%s">share your feedback</a> about this version of BuddyPress on our website. ', 'buddypress' ), 635 esc_url( 'https://buddypress.org/support/' ) 636 ); 637 ?> 638 </p> 639 <p><?php esc_html_e( 'Thank you for using BuddyPress! 😊', 'buddypress' ); ?></p> 640 641 <br /><br /> 642 </div> 643 644 <div class="bp-hello-footer"> 645 <div class="bp-hello-social-cta"> 646 <p> 647 <?php 648 printf( 649 _n( 'Built by <a href="%s">%s volunteer</a>.', 'Built by <a href="%s">%s volunteers</a>.', 100, 'buddypress' ), 650 esc_url( bp_get_admin_url( 'admin.php?page=bp-credits' ) ), 651 number_format_i18n( 100 ) 652 ); 653 ?> 654 </p> 625 655 </div> 626 656 627 <div class="bp-feature"> 628 <span class="dashicons dashicons-email" aria-hidden="true"></span> 629 <h4 class="feature-title"><?php esc_html_e( 'Send group invitation only once per user', 'buddypress' ); ?></h4> 630 <p><?php esc_html_e( 'Prevent duplicate group invitations from being sent to a user by double-checking if a group invitation has already been sent to that user.', 'buddypress' ); ?></p> 657 <div class="bp-hello-social-links"> 658 <ul class="bp-hello-social"> 659 <li> 660 <?php 661 printf( 662 '<a class="twitter" title="%1$s" href="%2$s"><span class="screen-reader-text">%3$s</span></a>', 663 esc_attr( 'Follow BuddyPress on Twitter', 'buddypress' ), 664 esc_url( 'https://twitter.com/buddypress' ), 665 esc_html( 'Follow BuddyPress on Twitter', 'buddypress' ) 666 ); 667 ?> 668 </li> 669 670 <li> 671 <?php 672 printf( 673 '<a class="support" title="%1$s" href="%2$s"><span class="screen-reader-text">%3$s</span></a>', 674 esc_attr( 'Visit the Support Forums', 'buddypress' ), 675 esc_url( 'https://buddypress.org/support/' ), 676 esc_html( 'Visit the Support Forums', 'buddypress' ) 677 ); 678 ?> 679 </li> 680 </ul> 631 681 </div> 632 633 <div class="bp-feature opposite">634 <span class="dashicons dashicons-testimonial" aria-hidden="true"></span>635 <h4 class="feature-title"><?php esc_html_e( 'Tooltips Usable for All Devices', 'buddypress' ); ?></h4>636 637 <p><?php esc_html_e( 'Replaced HTML title attributes with tooltips which provide additional information and visual cues where needed on mouse hover and keyboard focus events.', 'buddypress' );638 ?></p>639 </div>640 641 682 </div> 642 643 <div class="bp-changelog-section">644 645 <h3 class="changelog-title"><?php esc_html_e( 'More under the hood …', 'buddypress' ); ?></h3>646 <div class="bp-changelog bp-three-column">647 <div class="bp-column">648 <h4 class="title"><?php esc_html_e( 'Better support for private message thread links in emails', 'buddypress' ); ?></h4>649 <p><?php esc_html_e( 'Redirect non-authenticated users to the login screen and authenticated users to the message linked.', 'buddypress' ); ?></p>650 </div>651 <div class="bp-column">652 <h4 class="title"><?php esc_html_e( 'Compatibility with Bootstrap themes', 'buddypress' ); ?></h4>653 <p><?php esc_html_e( 'Removed issues with BuddyPress-generated content being hidden in the Groups loop and Activity comments in Bootstrap themes.', 'buddypress' ); ?></p>654 </div>655 656 <div class="bp-column">657 <h4 class="title"><?php esc_html_e( 'Improve profile image uploads', 'buddypress' ); ?></h4>658 <p><?php esc_html_e( 'Fixed issues with uploading in iOS Safari and uploading files with non-ASCII filenames.', 'buddypress' ); ?></p>659 </div>660 </div>661 662 <div class="bp-changelog bp-three-column">663 <div class="bp-column">664 <h4 class="title"><?php esc_html_e( 'URL compatibility for LightSpeed Servers', 'buddypress' ); ?></h4>665 <p><?php666 /* translators: %s: trailingslashit() */667 printf( __( 'Audited and changed template link functions to use %s where necessary.', 'buddypress' ),668 '<code>trailingslashit()</code>' );669 ?></p>670 </div>671 <div class="bp-column">672 <h4 class="title"><?php esc_html_e( 'Template Packs UI in BuddyPress > Settings.', 'buddypress' ); ?></h4>673 <p><?php esc_html_e( 'Register your new BuddyPress theme package and allow the user to select which template pack to use.', 'buddypress' ); ?></p>674 </div>675 676 <div class="bp-column">677 <h4 class="title"><?php678 /* translators: %s: bp_group_link() */679 printf( __( 'New template function %s', 'buddypress' ),680 '<code>bp_group_link()</code>' );681 ?></h4>682 <p><?php esc_html_e( 'Output a group name as a text hyperlink where appropriate.', 'buddypress' ); ?></p>683 </div>684 </div>685 686 </div>687 688 <div class="bp-assets">689 <p><?php _ex( 'Learn more:', 'About screen, website links', 'buddypress' ); ?> <a href="https://buddypress.org/blog/"><?php _ex( 'News', 'About screen, link to project blog', 'buddypress' ); ?></a> • <a href="https://buddypress.org/support/"><?php _ex( 'Support', 'About screen, link to support site', 'buddypress' ); ?></a> • <a href="https://codex.buddypress.org/"><?php _ex( 'Documentation', 'About screen, link to documentation', 'buddypress' ); ?></a> • <a href="https://bpdevel.wordpress.com/"><?php _ex( 'Development Blog', 'About screen, link to development blog', 'buddypress' ); ?></a></p>690 691 <p><?php _ex( 'Twitter:', 'official Twitter accounts:', 'buddypress' ); ?> <a href="https://twitter.com/buddypress/"><?php _ex( 'BuddyPress', '@buddypress twitter account name', 'buddypress' ); ?></a> • <a href="https://twitter.com/bptrac/"><?php _ex( 'Trac', '@bptrac twitter account name', 'buddypress' ); ?></a> • <a href="https://twitter.com/buddypressdev/"><?php _ex( 'Development', '@buddypressdev twitter account name', 'buddypress' ); ?></a></p>692 </div>693 694 683 </div> 695 684 … … 888 877 } 889 878 890 /**891 * Output welcome text and badge for What's New and Credits pages.892 *893 * @since 2.2.0894 */895 public static function welcome_text() {896 897 // Switch welcome text based on whether this is a new installation or not.898 $welcome_text = ( self::is_new_install() )899 ? __( 'Thank you for installing BuddyPress! BuddyPress adds community features to WordPress. Member Profiles, Activity Streams, Direct Messaging, Notifications, and more!', 'buddypress' )900 : __( 'Thank you for updating! BuddyPress %s has many new improvements that you will enjoy.', 'buddypress' );901 902 ?>903 904 <h1><?php printf( esc_html__( 'Welcome to BuddyPress %s', 'buddypress' ), self::display_version() ); ?></h1>905 906 <div class="about-text">907 <?php908 if ( self::is_new_install() ) {909 echo $welcome_text;910 } else {911 printf( $welcome_text, self::display_version() );912 }913 ?>914 </div>915 916 <div class="bp-badge"></div>917 918 <?php919 }920 921 /**922 * Output tab navigation for `What's New` and `Credits` pages.923 *924 * @since 2.2.0925 *926 * @param string $tab Tab to highlight as active.927 */928 public static function tab_navigation( $tab = 'whats_new' ) {929 ?>930 931 <h2 class="nav-tab-wrapper">932 <a class="nav-tab <?php if ( 'BP_Admin::about_screen' === $tab ) : ?>nav-tab-active<?php endif; ?>" href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-about' ), 'index.php' ) ) ); ?>">933 <?php esc_html_e( 'What’s New', 'buddypress' ); ?>934 </a><a class="nav-tab <?php if ( 'BP_Admin::credits_screen' === $tab ) : ?>nav-tab-active<?php endif; ?>" href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-credits' ), 'index.php' ) ) ); ?>">935 <?php esc_html_e( 'Credits', 'buddypress' ); ?>936 </a>937 </h2>938 939 <?php940 }941 942 879 /** Emails ****************************************************************/ 943 880 … … 1089 1026 'dependencies' => array(), 1090 1027 ), 1028 1029 // 3.0 1030 'bp-hello-css' => array( 1031 'file' => "{$url}hello{$min}.css", 1032 'dependencies' => array( 'bp-admin-common-css' ), 1033 ), 1091 1034 ) ); 1092 1093 1035 1094 1036 $version = bp_get_version(); … … 1127 1069 'footer' => true, 1128 1070 ), 1071 1072 // 3.0 1073 'bp-hello-js' => array( 1074 'file' => "{$url}hello{$min}.js", 1075 'dependencies' => array(), 1076 'footer' => true, 1077 ), 1129 1078 ) ); 1130 1079
Note: See TracChangeset
for help on using the changeset viewer.