Нет описания

SubscriberCustomField.php 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace MailPoet\Models;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Util\Helpers;
  5. /**
  6. * @property int $subscriberId
  7. * @property int $customFieldId
  8. * @property string $value
  9. */
  10. class SubscriberCustomField extends Model {
  11. public static $_table = MP_SUBSCRIBER_CUSTOM_FIELD_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration
  12. public static function createOrUpdate($data = []) {
  13. $customField = CustomField::findOne($data['custom_field_id']);
  14. if ($customField instanceof CustomField) {
  15. $customField = $customField->asArray();
  16. } else {
  17. return false;
  18. }
  19. if ($customField['type'] === 'date') {
  20. if (is_array($data['value'])) {
  21. $day = (
  22. isset($data['value']['day'])
  23. ? (int)$data['value']['day']
  24. : 1
  25. );
  26. $month = (
  27. isset($data['value']['month'])
  28. ? (int)$data['value']['month']
  29. : 1
  30. );
  31. $year = (
  32. isset($data['value']['year'])
  33. ? (int)$data['value']['year']
  34. : 1970
  35. );
  36. $data['value'] = mktime(0, 0, 0, $month, $day, $year);
  37. }
  38. }
  39. return parent::_createOrUpdate($data, [
  40. 'custom_field_id' => $data['custom_field_id'],
  41. 'subscriber_id' => $data['subscriber_id'],
  42. ]);
  43. }
  44. public static function createMultiple($values) {
  45. return self::rawExecute(
  46. 'INSERT IGNORE INTO `' . self::$_table . '` ' .
  47. '(custom_field_id, subscriber_id, value) ' .
  48. 'VALUES ' . rtrim(
  49. str_repeat(
  50. '(?, ?, ?)' . ', ',
  51. count($values)
  52. ), ', '
  53. ),
  54. Helpers::flattenArray($values)
  55. );
  56. }
  57. public static function updateMultiple($values) {
  58. $subscriberIds = array_unique(array_column($values, 1));
  59. $query = sprintf(
  60. "UPDATE `%s` SET value = (CASE %s ELSE value END) WHERE subscriber_id IN (%s)",
  61. self::$_table,
  62. str_repeat('WHEN custom_field_id = ? AND subscriber_id = ? THEN ? ', count($values)),
  63. implode(',', $subscriberIds)
  64. );
  65. self::rawExecute(
  66. $query,
  67. Helpers::flattenArray($values)
  68. );
  69. }
  70. public static function deleteSubscriberRelations($subscriber) {
  71. if ($subscriber === false) return false;
  72. $relations = self::where('subscriber_id', $subscriber->id);
  73. return $relations->deleteMany();
  74. }
  75. public static function deleteManySubscriberRelations(array $subscriberIds) {
  76. if (empty($subscriberIds)) return false;
  77. $relations = self::whereIn('subscriber_id', $subscriberIds);
  78. return $relations->deleteMany();
  79. }
  80. }