Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 23 |
|
0.00% |
0 / 7 |
CRAP | |
0.00% |
0 / 1 |
ImageRecommendationBaseTaskTypeHandler | |
0.00% |
0 / 23 |
|
0.00% |
0 / 7 |
132 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
getId | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getChangeTags | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getRecommendationProvider | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getSubmissionHandler | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
validateTaskTypeConfiguration | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
20 | |||
getTaskTypeIdByChangeTagName | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | namespace GrowthExperiments\NewcomerTasks\TaskType; |
4 | |
5 | use GrowthExperiments\NewcomerTasks\AddImage\AddImageSubmissionHandler; |
6 | use GrowthExperiments\NewcomerTasks\AddImage\ImageRecommendationProvider; |
7 | use GrowthExperiments\NewcomerTasks\ConfigurationLoader\ConfigurationValidator; |
8 | use LogicException; |
9 | use MediaWiki\Title\TitleParser; |
10 | use StatusValue; |
11 | use Wikimedia\Assert\Assert; |
12 | |
13 | abstract class ImageRecommendationBaseTaskTypeHandler extends StructuredTaskTypeHandler { |
14 | |
15 | // This weird hack is the only way in PHP to have abstract constants. |
16 | public const ID = self::ID; |
17 | public const TASK_TYPE_ID = self::TASK_TYPE_ID; |
18 | public const CHANGE_TAG = self::CHANGE_TAG; |
19 | public const WEIGHTED_TAG_PREFIX = self::WEIGHTED_TAG_PREFIX; |
20 | |
21 | protected ImageRecommendationProvider $recommendationProvider; |
22 | protected AddImageSubmissionHandler $submissionHandler; |
23 | |
24 | /** |
25 | * @param ConfigurationValidator $configurationValidator |
26 | * @param TitleParser $titleParser |
27 | * @param ImageRecommendationProvider $recommendationProvider |
28 | * @param AddImageSubmissionHandler $submissionHandler |
29 | */ |
30 | public function __construct( |
31 | ConfigurationValidator $configurationValidator, |
32 | TitleParser $titleParser, |
33 | ImageRecommendationProvider $recommendationProvider, |
34 | AddImageSubmissionHandler $submissionHandler |
35 | ) { |
36 | parent::__construct( $configurationValidator, $titleParser ); |
37 | Assert::parameterType( ImageRecommendationProvider::class, $recommendationProvider, |
38 | '$recommendationProvider' ); |
39 | $this->recommendationProvider = $recommendationProvider; |
40 | $this->submissionHandler = $submissionHandler; |
41 | } |
42 | |
43 | /** @inheritDoc */ |
44 | public function getId(): string { |
45 | return static::ID; |
46 | } |
47 | |
48 | /** @inheritDoc */ |
49 | public function getChangeTags( ?string $taskType = null ): array { |
50 | return [ TaskTypeHandler::NEWCOMER_TASK_TAG, static::CHANGE_TAG ]; |
51 | } |
52 | |
53 | /** @inheritDoc */ |
54 | public function getRecommendationProvider(): ImageRecommendationProvider { |
55 | return $this->recommendationProvider; |
56 | } |
57 | |
58 | /** @inheritDoc */ |
59 | public function getSubmissionHandler(): AddImageSubmissionHandler { |
60 | return $this->submissionHandler; |
61 | } |
62 | |
63 | /** @inheritDoc */ |
64 | public function validateTaskTypeConfiguration( string $taskTypeId, array $config ): StatusValue { |
65 | $status = parent::validateTaskTypeConfiguration( $taskTypeId, $config ); |
66 | if ( !$status->isOK() ) { |
67 | return $status; |
68 | } |
69 | foreach ( [ |
70 | ImageRecommendationBaseTaskType::FIELD_MAX_TASKS_PER_DAY, |
71 | ImageRecommendationBaseTaskType::FIELD_MINIMUM_CAPTION_CHARACTER_LENGTH, |
72 | ] as $field ) { |
73 | if ( array_key_exists( $field, $config ) ) { |
74 | $status->merge( $this->configurationValidator->validateInteger( |
75 | $config, $field, $taskTypeId, 1 ) ); |
76 | } |
77 | } |
78 | return $status; |
79 | } |
80 | |
81 | /** @inheritDoc */ |
82 | public function getTaskTypeIdByChangeTagName( string $changeTagName ): ?string { |
83 | if ( $changeTagName !== static::CHANGE_TAG ) { |
84 | throw new LogicException( "\"$changeTagName\" is not a valid change tag name for " . static::class ); |
85 | } |
86 | return static::TASK_TYPE_ID; |
87 | } |
88 | |
89 | } |