* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * @copyright PayPal */ namespace PaypalAddons\services; use Db; use DbQuery; use Exception; class WebhookService { /** * @param \PaypalOrder $paypalOrder * * @return \PaypalWebhook * * @throws \PrestaShopException */ public function createForOrder(\PaypalOrder $paypalOrder, $idState = 0) { $query = (new DbQuery()) ->select('id_paypal_webhook') ->from(\PaypalWebhook::$definition['table']) ->where('id_paypal_order = ' . (int) $paypalOrder->id) ->where('id_webhook IS NULL OR id_webhook = ""'); if ($idState) { $query->where('id_state = ' . (int) $idState); } $idPaypalWebhook = (int) Db::getInstance()->getValue($query); if ($idPaypalWebhook) { $webhook = new \PaypalWebhook($idPaypalWebhook); } else { $webhook = new \PaypalWebhook(); } $webhook->id_paypal_order = (int) $paypalOrder->id; $webhook->id_state = $idState; $webhook->save(); return $webhook; } /** * @param \PaypalOrder $paypalOrder * * @return \PaypalWebhook[] */ public function getPendingWebhooks(\PaypalOrder $paypalOrder, $delay = null) { $webhooks = []; $query = (new DbQuery()) ->from(\PaypalWebhook::$definition['table']) ->where('id_paypal_order = ' . (int) $paypalOrder->id) ->where('id_webhook IS NULL OR id_webhook = ""'); if (false == is_null($delay)) { $query->where( sprintf( 'date_add < DATE_SUB(STR_TO_DATE(\'%s\', GET_FORMAT(DATETIME,\'ISO\')), INTERVAL %d HOUR)', date(\PaypalWebhook::DATE_FORMAT), (int) $delay ) ); } try { $result = Db::getInstance()->executeS($query); } catch (Exception $e) { return $webhooks; } if (empty($result)) { return $webhooks; } foreach ($result as $row) { try { $webhook = new \PaypalWebhook(); $webhook->hydrate($row); $webhooks[] = $webhook; } catch (Exception $e) { } } return $webhooks; } }