self::TABLE, 'primary' => self::ID, 'fields' => [ self::ID => ['type' => self::TYPE_INT], self::WEBSITE_ID => ['type' => self::TYPE_INT, 'required' => true], self::CUSTOMER_ID => ['type' => self::TYPE_INT, 'required' => true], self::REFERENCE_ID => ['type' => self::TYPE_STRING, 'required' => true, 'size' => 35], self::EXPIRES => ['type' => self::TYPE_STRING, 'required' => true, 'size' => 4], self::MASK => ['type' => self::TYPE_STRING, 'required' => true, 'size' => 32], self::CARD_TYPE => ['type' => self::TYPE_DATE, 'required' => true, 'size' => 20], self::TIMESTAMP => ['type' => self::TYPE_BOOL], ], ]; /** * Remembers card data, when it does not exist in database yet. * * @return bool * * @throws PrestaShopDatabaseException */ public function replace() { return Db::getInstance()->insert( self::TABLE, $this->getFields(), false, true, Db::REPLACE ); } /** * Saves card data in database. * * @param int $customerId * @param string $referenceId * @param string $expirationYear * @param string $mask * @param string $cardType * * @return Przelewy24Recurring|null * * @throws PrestaShopDatabaseException */ public static function remember($customerId, $referenceId, $expirationYear, $mask, $cardType) { $cardRemembered = new Przelewy24Recurring(); $cardRemembered->website_id = 1; $cardRemembered->customer_id = $customerId; $cardRemembered->reference_id = $referenceId; $cardRemembered->expires = $expirationYear; $cardRemembered->mask = $mask; $cardRemembered->card_type = $cardType; return $cardRemembered->replace() ? $cardRemembered : null; } /** * Find credit cards by customer * * @param int $customerId * @param int $limit Only limited number of cards assigned to customer should be displayed (because of performance * reasons). It is unlikely for anyone to own more than 99999 (value configured in const * self::MAX_NUMBER_OF_CREDIT_CARDS_ALLOWED_PER_CUSTOMER) different credit cards anyway. But you * can still use limit = 0 to load all entries (default PrestaShopCollection behaviour) if you * need to. * * @return Przelewy24Recurring[] */ public static function findByCustomerId($customerId, $limit = self::MAX_NUMBER_OF_CREDIT_CARDS_ALLOWED_PER_CUSTOMER) { $queryBuilder = new PrestaShopCollection(self::class); return $queryBuilder ->where('customer_id', '=', $customerId) ->setPageSize($limit) ->getResults(); } /** * Gets result of findByCustomerId and parses each of them into array. * * @param int $customerId * @param int $limit for null value default limit from findByCustomerId will be applied * * @return array */ public static function findArrayByCustomerId($customerId, $limit = null) { $result = []; foreach (Przelewy24Recurring::findByCustomerId($customerId, $limit) as $card) { $result[] = array_merge( $card->getFields(), [ 'year' => Tools::substr($card->getFields()['expires'], 0, 2), 'month' => Tools::substr($card->getFields()['expires'], 2, 2), 'mask_substr' => Tools::substr($card->getFields()['mask'], -9), ] ); } return $result; } /** * Returns true if this entry can be removed by certain user (using his id) and false if operation is not allowed). * * @param int $customerId * * @return bool */ public function canBeRemovedByUser($customerId) { return $customerId && ((int) $this->customer_id === (int) $customerId); } }