Completed
Branch EDTR/master (872e60)
by
unknown
27:04 queued 17:58
created

PriceCreate::mutateAndGetPayload()   A

Complexity

Conditions 4
Paths 1

Size

Total Lines 49

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 1
nop 2
dl 0
loc 49
rs 9.1127
c 0
b 0
f 0
1
<?php
2
3
namespace EventEspresso\core\domain\services\graphql\mutators;
4
5
use EEM_Price;
6
use EE_Price;
7
use EventEspresso\core\domain\services\graphql\types\Price;
8
use EventEspresso\core\domain\services\graphql\data\mutations\PriceMutation;
9
10
use EE_Error;
11
use InvalidArgumentException;
12
use ReflectionException;
13
use EventEspresso\core\exceptions\InvalidDataTypeException;
14
use EventEspresso\core\exceptions\InvalidInterfaceException;
15
16
use GraphQL\Type\Definition\ResolveInfo;
17
use WPGraphQL\AppContext;
18
use GraphQL\Error\UserError;
19
20
class PriceCreate
21
{
22
23
    /**
24
     * Defines the mutation data modification closure.
25
     *
26
     * @param EEM_Price $model
27
     * @param Price     $type
28
     * @return callable
29
     */
30
    public static function mutateAndGetPayload(EEM_Price $model, Price $type)
31
    {
32
        /**
33
         * Creates an entity.
34
         *
35
         * @param array       $input   The input for the mutation
36
         * @param AppContext  $context The AppContext passed down to all resolvers
37
         * @param ResolveInfo $info    The ResolveInfo passed down to all resolvers
38
         * @return array
39
         * @throws UserError
40
         * @throws ReflectionException
41
         * @throws InvalidArgumentException
42
         * @throws InvalidInterfaceException
43
         * @throws InvalidDataTypeException
44
         * @throws EE_Error
45
         */
46
        return static function ($input, AppContext $context, ResolveInfo $info) use ($model, $type) {
47
48
            /**
49
             * Stop now if a user isn't allowed to create an entity.
50
             */
51
            if (! current_user_can('ee_edit_events')) {
52
                // translators: the %1$s is the name of the object being mutated
53
                throw new UserError(
54
                    sprintf(esc_html__('Sorry, you are not allowed to create %1$s', 'event_espresso'), $type->name())
55
                );
56
            }
57
58
            $args = PriceMutation::prepareFields($input);
59
60
            if (empty($args['PRT_ID'])) {
61
                // translators: the placeholder is the name of the field.
62
                throw new UserError(
63
                    sprintf(esc_html__('A valid %1$s must be passed.', 'event_espresso'), 'priceType')
64
                );
65
            }
66
67
            $entity = EE_Price::new_instance($args);
68
            $id = $entity->save();
69
70
            if (empty($id)) {
71
                throw new UserError(esc_html__('The object failed to create but no error was provided', 'event_espresso'));
72
            }
73
74
            return [
75
                'id' => $id,
76
            ];
77
        };
78
    }
79
}
80