Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
SuggestedEditsConfigProvider
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 2
56
0.00% covered (danger)
0.00%
0 / 1
 addAutocomputedProperties
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 loadForNewcomerTasks
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace GrowthExperiments\Config\Providers;
4
5use MediaWiki\Extension\CommunityConfiguration\Provider\DataProvider;
6use StatusValue;
7use stdClass;
8
9class SuggestedEditsConfigProvider extends DataProvider {
10
11    private const MAP_TASKS_PER_GROUP = [
12        'copyedit' => 'easy',
13        'links' => 'easy',
14        'references' => 'medium',
15        'update' => 'medium',
16        'expand' => 'hard',
17        'section_image_recommendation' => 'medium',
18        'image_recommendation' => 'medium',
19        'link_recommendation' => 'easy',
20    ];
21    private const DEFAULT_GROUP = 'unknown';
22
23    private const MAP_TASK_TYPES = [
24        'image_recommendation' => 'image-recommendation',
25        'section_image_recommendation' => 'section-image-recommendation',
26        'link_recommendation' => 'link-recommendation',
27    ];
28    private const DEFAULT_TASK_TYPE = 'template-based';
29
30    /**
31     * @inheritDoc
32     */
33    protected function addAutocomputedProperties( stdClass $config ): stdClass {
34        foreach ( $config as $taskId => $taskData ) {
35            if ( !$taskData instanceof stdClass ) {
36                continue;
37            }
38            $config->$taskId->group = self::MAP_TASKS_PER_GROUP[$taskId] ?? self::DEFAULT_GROUP;
39            $config->$taskId->type = self::MAP_TASK_TYPES[$taskId] ?? self::DEFAULT_TASK_TYPE;
40        }
41        return $config;
42    }
43
44    public function loadForNewcomerTasks(): StatusValue {
45        $result = $this->loadValidConfiguration();
46        if ( $result->isOK() ) {
47            $data = $result->getValue();
48            unset( $data->GEInfoboxTemplates );
49
50            foreach ( $data as $key => $value ) {
51                if ( str_contains( $key, '_' ) ) {
52                    $newKey = str_replace( '_', '-', $key );
53                    $data->$newKey = $value;
54                    unset( $data->$key );
55                }
56            }
57
58            $result->setResult( true, $data );
59        }
60        return $result;
61    }
62}