Making WordPress.org

Changeset 6686


Ignore:
Timestamp:
02/18/2018 02:58:36 PM (9 years ago)
Author:
ocean90
Message:

Rosetta Roles: Send newly added translation editors an email notification.

Fixes #1613.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/global.wordpress.org/public_html/wp-content/mu-plugins/roles/rosetta-roles.php

    r6685 r6686  
    7373                        add_action( 'admin_menu', array( $this, 'register_translation_editors_page' ) );
    7474                        add_filter( 'set-screen-option', array( $this, 'save_custom_screen_options' ), 10, 3 );
     75                        add_action( 'after_setup_theme', array( $this, 'register_resources_nav_menu' ) );
    7576
    7677                        add_action( 'translation_editor_added', array( $this, 'update_wporg_profile_badge' ) );
    7778                        add_action( 'translation_editor_removed', array( $this, 'update_wporg_profile_badge' ) );
     79
     80                        add_action( 'translation_editor_added', array( $this, 'send_email_notification' ), 10, 2 );
     81                        add_action( 'translation_editor_updated', array( $this, 'send_email_notification' ), 10, 2 );
    7882                }
    7983
    … …  
    8185
    8286                Cross_Locale_PTE::init_admin();
     87        }
     88
     89        /**
     90         * Registers a nav menu for storing resources for translation editors.
     91         */
     92        public function register_resources_nav_menu() {
     93                register_nav_menu( 'rosetta_translation_editor_resources', __( 'Resources for translation editors', 'rosetta' ) );
    8394        }
    8495
    … …  
    506517
    507518        /**
     519         * Sends an email to the new translation editor.
     520         *
     521         * @param \WP_User $user           The user object of the translation editor.
     522         * @param array    $projects_added List of project IDs.
     523         */
     524        public function send_email_notification( $user, $projects_added ) {
     525                // Don't send an email if no new projects have been added.
     526                if ( ! $projects_added ) {
     527                        return;
     528                }
     529
     530                $to      = $user->user_email;
     531                $subject = __( 'You have been added to a WordPress project as a translation editor', 'rosetta' );
     532
     533                if ( [ '0' ] === $projects_added ) {
     534                        // General Translation Editor.
     535
     536                        /* translators: Do not translate the placeholders USERNAME, LOCALENAME, LOCALEURL. */
     537                        $message = __(
     538                                'Howdy ###USERNAME###,
     539
     540We are happy to inform you that you have been successfully added as a General Translation Editor of WordPress for ###LOCALENAME###.
     541
     542As a General Translation Editor you have access to submit and approve translations for all projects available at ###LOCALEURL###.
     543
     544Alongside WordPress itself, it’s good to prioritize translating the projects that ship with it first – The default themes like Twenty Seventeen or Twenty Sixteen, and Akismet.
     545
     546Please get to know how the team works by reading the Translators Handbook – https://make.wordpress.org/polyglots/handbook/, a good place to start is the General Expectations page.
     547
     548As a General Translation Editor for the locale, we request that you fill out your WordPress.org profile (https://profiles.wordpress.org/profile/), register on Slack and provide a way for translation contributors to reach you.
     549
     550We also ask all WordPress General Translation Editors to subscribe for notifications for their locales, you can find the notification subscription settings in your profile settings (https://profiles.wordpress.org/profile/notifications/).
     551
     552The Polyglots team connects on Slack once per week at 11am UTC every Wednesday. We’d love to have you there if you can make it. Register from http://chat.wordpress.org.
     553If you have any questions about the processes or need any help, reach the team on Slack or on https://make.wordpress.org/polyglots/.
     554
     555Welcome to the WordPress Polyglots team and happy translating!'
     556                        );
     557
     558                        $message = str_replace(
     559                                [
     560                                        '###USERNAME###',
     561                                        '###LOCALENAME###',
     562                                        '###LOCALEURL###',
     563                                ],
     564                                [
     565                                        $user->user_login,
     566                                        '#' . $this->gp_locale->wp_locale . ' (' . $this->gp_locale->native_name . ')',
     567                                        'https://translate.wordpress.org/locale/' . $this->gp_locale->slug,
     568                                ],
     569                                $message
     570                        );
     571                } else {
     572                        // Project Translation Editor.
     573
     574                        /* translators: Do not translate the placeholders USERNAME, LOCALENAME, PROJECTLIST, RESOURCESLIST. */
     575                        $message = __(
     576                                'Howdy ###USERNAME###,
     577
     578We are happy to inform you that you have been successfully added as a Project Translation Editor for ###LOCALENAME### for the following projects:
     579
     580###PROJECTLIST###
     581
     582You have been added to these projects either by your own request, or by the request of the plugin author.
     583
     584Before translating, please get to know how the team works by reading the Translators Handbook – https://make.wordpress.org/polyglots/handbook/, a good place to start is the General Expectations page.
     585
     586Your local translation team can be found on https://make.wordpress.org/polyglots/teams/. Make sure you get familiar with the documentation about translating in your language that other contributors from your team have prepared.
     587
     588###RESOURCESLIST###
     589
     590The Polyglots team connects on Slack once per week at 11am UTC every Wednesday. We’d love to have you there if you can make it. Register from https://chat.wordpress.org/.
     591If you have any questions about the processes or need any help, reach the team on Slack or on https://make.wordpress.org/polyglots/.
     592
     593Welcome to the WordPress Polyglots team and happy translating.'
     594                        );
     595
     596                        $projects     = $this->get_translate_projects();
     597                        $project_tree = $this->get_project_tree( $projects, 0, 1 );
     598
     599                        $project_list = [];
     600
     601                        foreach ( $projects_added as $project_id ) {
     602                                if ( $projects[ $project_id ] ) {
     603                                        $parent = $this->get_parent_project( $project_tree, $project_id );
     604                                        if ( $parent->id != $project_id ) {
     605                                                $name = sprintf(
     606                                                        /* translators: 1: Parent project name, 2: Child project name */
     607                                                        __( '%1$s → %2$s', 'rosetta' ),
     608                                                        $parent->name,
     609                                                        $projects[ $project_id ]->name
     610                                                );
     611                                        } else {
     612                                                $name = $projects[ $project_id ]->name;
     613                                        }
     614
     615                                        $name = sprintf(
     616                                                '%s: %s',
     617                                                $name,
     618                                                esc_url( 'https://translate.wordpress.org/projects/' . $projects[ $project_id ]->path )
     619                                        );
     620
     621                                        $project_list[] = html_entity_decode( $name, ENT_QUOTES, get_bloginfo( 'charset' ) );
     622                                }
     623                        }
     624
     625                        $resources_list = '';
     626
     627                        if ( has_nav_menu( 'rosetta_translation_editor_resources' ) ) {
     628                                $resources_list = (string) wp_nav_menu( [
     629                                        'fallback_cb'    => '__return_false',
     630                                        'theme_location' => 'rosetta_translation_editor_resources',
     631                                        'container'      => false,
     632                                        'echo'           => false,
     633                                        'depth'          => 1,
     634                                        'items_wrap'     => '%3$s',
     635                                        // Custom walker that returns plain text links.
     636                                        'walker'         => new class() extends Walker_Nav_Menu {
     637                                                public function start_lvl( &$output, $depth = 0, $args = array() ) {
     638                                                        $output .= "\n";
     639                                                }
     640                                                public function end_lvl( &$output, $depth = 0, $args = array() ) {
     641                                                        $output .= "\n";
     642                                                }
     643                                                public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
     644                                                        $href  = ! empty( $item->url ) ? $item->url : '';
     645                                                        $title = apply_filters( 'the_title', $item->title, $item->ID );
     646                                                        $title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );
     647
     648                                                        $item_output = $title;
     649                                                        if ( $href ) {
     650                                                                $item_output .= ': ' . esc_url( $href );
     651                                                        }
     652
     653                                                        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
     654                                                }
     655                                                public function end_el( &$output, $item, $depth = 0, $args = array() ) {
     656                                                        $output .= "\n";
     657                                                }
     658                                        },
     659                                ] );
     660                        }
     661
     662                        $message = str_replace(
     663                                [
     664                                        '###USERNAME###',
     665                                        '###LOCALENAME###',
     666                                        '###PROJECTLIST###',
     667                                        '###RESOURCESLIST###',
     668                                ],
     669                                [
     670                                        $user->user_login,
     671                                        '#' . $this->gp_locale->wp_locale . ' (' . $this->gp_locale->native_name . ')',
     672                                        implode( "\n", $project_list ),
     673                                        $resources_list,
     674                                ],
     675                                $message
     676                        );
     677                }
     678
     679                $headers = "From: \"WordPress Polyglots\" <donotreply@wordpress.org>\n" . 'Content-Type: text/plain; charset="' . get_option( 'blog_charset' ) . "\"\n";
     680
     681                wp_mail( $to, $subject, $message, $headers );
     682        }
     683
     684        /**
    508685         * Retrieves the assigned projects of a user
    509686         *
Note: See TracChangeset for help on using the changeset viewer.