MDL-69166 core_payment: helper methods to get cost and to deliver order
[moodle.git] / payment / classes / helper.php
index 1fb9261..0c86875 100644 (file)
@@ -96,14 +96,57 @@ class helper {
      *
      * @param float $amount Amount of payment
      * @param string $currency Currency of payment
+     * @param string $component Name of the component that the componentid belongs to
+     * @param int $componentid An internal identifier that is used by the component
+     * @param string $description Description of the payment
      * @return array
      */
-    public static function gateways_modal_link_params(float $amount, string $currency) : array {
+    public static function gateways_modal_link_params(float $amount, string $currency, string $component, int $componentid,
+            string $description): array {
         return [
             'id' => 'gateways-modal-trigger',
             'role' => 'button',
             'data-amount' => $amount,
             'data-currency' => $currency,
+            'data-component' => $component,
+            'data-componentid' => $componentid,
+            'data-description' => $description,
         ];
     }
+
+    /**
+     * Asks the cost from the related component.
+     *
+     * @param string $component Name of the component that the componentid belongs to
+     * @param int $componentid An internal identifier that is used by the component
+     * @return array['amount' => float, 'currency' => string]
+     * @throws \moodle_exception
+     */
+    public static function get_cost(string $component, int $componentid): array {
+        $cost = component_class_callback("$component\\payment\\provider", 'get_cost', [$componentid]);
+
+        if ($cost === null) {
+            throw new \moodle_exception('callbacknotimplemented', 'core_payment', '', $component);
+        }
+
+        return $cost;
+    }
+
+    /**
+     * Delivers what the user paid for.
+     *
+     * @param string $component Name of the component that the componentid belongs to
+     * @param int $componentid An internal identifier that is used by the component
+     * @return bool Whether successful or not
+     * @throws \moodle_exception
+     */
+    public static function deliver_order(string $component, int $componentid): bool {
+        $result = component_class_callback("$component\\payment\\provider", 'deliver_order', [$componentid]);
+
+        if ($result === null) {
+            throw new \moodle_exception('callbacknotimplemented', 'core_payment', '', $component);
+        }
+
+        return $result;
+    }
 }