| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- namespace MailPoet\Models;
- if (!defined('ABSPATH')) exit;
- use MailPoet\Util\Helpers;
- /**
- * @property int $subscriberId
- * @property int $customFieldId
- * @property string $value
- */
- class SubscriberCustomField extends Model {
- public static $_table = MP_SUBSCRIBER_CUSTOM_FIELD_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration
- public static function createOrUpdate($data = []) {
- $customField = CustomField::findOne($data['custom_field_id']);
- if ($customField instanceof CustomField) {
- $customField = $customField->asArray();
- } else {
- return false;
- }
- if ($customField['type'] === 'date') {
- if (is_array($data['value'])) {
- $day = (
- isset($data['value']['day'])
- ? (int)$data['value']['day']
- : 1
- );
- $month = (
- isset($data['value']['month'])
- ? (int)$data['value']['month']
- : 1
- );
- $year = (
- isset($data['value']['year'])
- ? (int)$data['value']['year']
- : 1970
- );
- $data['value'] = mktime(0, 0, 0, $month, $day, $year);
- }
- }
- return parent::_createOrUpdate($data, [
- 'custom_field_id' => $data['custom_field_id'],
- 'subscriber_id' => $data['subscriber_id'],
- ]);
- }
- public static function createMultiple($values) {
- return self::rawExecute(
- 'INSERT IGNORE INTO `' . self::$_table . '` ' .
- '(custom_field_id, subscriber_id, value) ' .
- 'VALUES ' . rtrim(
- str_repeat(
- '(?, ?, ?)' . ', ',
- count($values)
- ), ', '
- ),
- Helpers::flattenArray($values)
- );
- }
- public static function updateMultiple($values) {
- $subscriberIds = array_unique(array_column($values, 1));
- $query = sprintf(
- "UPDATE `%s` SET value = (CASE %s ELSE value END) WHERE subscriber_id IN (%s)",
- self::$_table,
- str_repeat('WHEN custom_field_id = ? AND subscriber_id = ? THEN ? ', count($values)),
- implode(',', $subscriberIds)
- );
- self::rawExecute(
- $query,
- Helpers::flattenArray($values)
- );
- }
- public static function deleteSubscriberRelations($subscriber) {
- if ($subscriber === false) return false;
- $relations = self::where('subscriber_id', $subscriber->id);
- return $relations->deleteMany();
- }
- public static function deleteManySubscriberRelations(array $subscriberIds) {
- if (empty($subscriberIds)) return false;
- $relations = self::whereIn('subscriber_id', $subscriberIds);
- return $relations->deleteMany();
- }
- }
|