Making WordPress.org

Changeset 9724


Ignore:
Timestamp:
04/15/2020 03:02:45 AM (6 years ago)
Author:
dd32
Message:

Translate: Only include a project in a users translated list if they hace contributed more than 5 strings to the project.

See #1664.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/wporg-gp-custom-stats/stats/user.php

    r9709 r9724  
    6060                        }
    6161
    62                         $this->user_project_stats[ "{$translation->user_id},{$project->id},{$translation_set->locale},{$translation_set->slug}" ] = true;
     62                        $key = "{$translation->user_id},{$project->id},{$translation_set->locale},{$translation_set->slug}";
     63                        if ( ! isset( $this->user_project_stats[ $key ] ) ) {
     64                                $this->user_project_stats[ $key ] = 0;
     65                        }
     66                        $this->user_project_stats[ $key ]++;
    6367                }
    6468        }
     
    117121                }
    118122
    119                 // Process the project stats too.
     123                // Process the user project stats too.
    120124                $values = [];
    121                 foreach ( $this->user_project_stats as $key => $dummy ) {
     125                foreach ( $this->user_project_stats as $key => $string_count ) {
    122126                        list( $user_id, $project_id, $locale, $locale_slug ) = explode( ',', $key );
    123127
    124                         $values[] = $wpdb->prepare( '(%d, %d, %s, %s, %s)',
    125                                 $user_id,
    126                                 $project_id,
    127                                 $locale,
    128                                 $locale_slug,
    129                                 $now
    130                         );
    131 
    132                         if ( count( $values ) > 50 ) {
    133                                 $wpdb->query(
    134                                         "INSERT INTO {$wpdb->user_projects} (`user_id`, `project_id`, `locale`, `locale_slug`, `last_modified`)
    135                                         VALUES " . implode( ', ', $values ) . "
    136                                         ON DUPLICATE KEY UPDATE `last_modified` = GREATEST( `last_modified`, VALUES(`last_modified`) )"
    137                                 );
    138                                 $values = [];
    139                         }
    140                 }
    141                 if ( $values ) {
    142                         $wpdb->query(
    143                                 "INSERT INTO {$wpdb->user_projects} (`user_id`, `project_id`, `locale`, `locale_slug`, `last_modified`)
    144                                 VALUES " . implode( ', ', $values ) . "
    145                                 ON DUPLICATE KEY UPDATE `last_modified` = GREATEST( `last_modified`, VALUES(`last_modified`) )"
    146                         );
    147                         $values = [];
     128                        // Step 1 - Does this user already have the project listed? Just Bump the date.
     129                        if ( $id = $wpdb->get_var( $wpdb->prepare(
     130                                "SELECT id FROM {$wpdb->user_projects}
     131                                WHERE user_id = %d AND project_id = %d AND locale = %s AND locale_slug = %s",
     132                                $user_id, $project_id, $locale, $locale_slug
     133                        ) ) ) {
     134                                $wpdb->update(
     135                                        $wpdb->user_projects,
     136                                        [ 'last_modified' => $now ],
     137                                        [ 'id' => $id ]
     138                                );
     139                                continue;
     140                        }
     141
     142                        // Step 2 - More than 5 strings? Import Maybe? Just insert.
     143                        if ( $string_count >= 5 ) {
     144                                $wpdb->insert(
     145                                        $wpdb->user_projects,
     146                                        [
     147                                                'user_id'       => $user_id,
     148                                                'project_id'    => $project_id,
     149                                                'locale'        => $locale,
     150                                                'locale_slug'   => $locale_slug,
     151                                                'last_modified' => $now
     152                                        ]
     153                                );
     154                                continue;
     155                        }
     156
     157                        // Step 3 - If not, find all the sub-project IDs, then all the translation sets, count strings by user.
     158                        $this_project        = GP::$project->get( $project_id );
     159                        $translation_set_ids = [];
     160
     161                        if ( ! $this_project->active ) {
     162                                continue;
     163                        }
     164
     165                        if ( $set = GP::$translation_set->by_project_id_slug_and_locale( $project->id, $locale_slug, $locale ) ) {
     166                                $translation_set_ids[] = (int) $set->id;
     167                        }
     168
     169                        // Fetch the strings from the sub projects too
     170                        foreach ( $this_project->sub_projects() as $project ) {
     171                                if ( ! $project->active ) {
     172                                        continue;
     173                                }
     174                                if ( $set = GP::$translation_set->by_project_id_slug_and_locale( $project->id, $locale_slug, $locale ) ) {
     175                                        $translation_set_ids[] = (int) $set->id;
     176                                }
     177                        }
     178
     179                        $user_translations = GP::$translation->find_many_no_map( [
     180                                'user_id'            => $user_id,
     181                                'translation_set_id' => $translation_set_ids
     182                        ] );
     183
     184                        if ( $user_translations && count( $user_translations ) >= 5 ) {
     185                                $wpdb->insert(
     186                                        $wpdb->user_projects,
     187                                        [
     188                                                'user_id'       => $user_id,
     189                                                'project_id'    => $project_id,
     190                                                'locale'        => $locale,
     191                                                'locale_slug'   => $locale_slug,
     192                                                'last_modified' => $now
     193                                        ]
     194                                );
     195                                continue;
     196                        }
    148197                }
    149198        }
Note: See TracChangeset for help on using the changeset viewer.