1-campaigns_repository.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace cx_newsletter;
  3. class campaigns_repository
  4. extends repository {
  5. public function create(campaign $target) : campaign {
  6. if ($target->has_id()) {
  7. throw $this->get_has_id_exception();
  8. }
  9. $converter = new campaigns_converter();
  10. $converter->load_object($target);
  11. $result = $this->get_database()->insert(
  12. $this->get_tables()->campaigns(),
  13. $converter->get_array()
  14. );
  15. if ($result === false) {
  16. throw $this->get_exception('create');
  17. }
  18. return $this->complete(
  19. new campaign($this->get_database()->insert_id)
  20. );
  21. }
  22. public function complete(campaign $target) : campaign {
  23. if (!$target->has_id()) {
  24. throw $this->get_blank_id_exception();
  25. }
  26. $query = new \cx_appengine\string_builder();
  27. $query->push('select * ');
  28. $query->push('from '.$this->get_tables()->campaigns().' ');
  29. $query->push('where id=%d');
  30. $sql = $this->get_database()->prepare($query, $target->get_id());
  31. $row = $this->get_database()->get_row($sql, ARRAY_A);
  32. if ($row === null ) {
  33. throw $this->get_exception('complete');
  34. }
  35. $converter = new campaigns_converter();
  36. $converter->load_array($row);
  37. $target = $converter->get_object();
  38. $mapper = new messages_mapper(
  39. $this->get_database(),
  40. $this->get_tables()
  41. );
  42. $target->message = $mapper->complete($target->message);
  43. return $target;
  44. }
  45. public function load_all(array $filters = [], ?int $limit = null) : array {
  46. $query = new \cx_appengine\string_builder();
  47. $query->push('select * ');
  48. $query->push('from '.$this->get_tables()->campaigns().' ');
  49. $query->push($this->parse_filters($filters));
  50. $query->push($this->parse_limit($limit));
  51. $query->push('order by id desc');
  52. $result = $this->get_database()->get_results($query->get(), ARRAY_A);
  53. if ($result === null) {
  54. throw $this->get_exception('load_all');
  55. }
  56. $campaigns = [];
  57. $converter = new campaigns_converter();
  58. $mapper = new messages_mapper(
  59. $this->get_database(),
  60. $this->get_tables()
  61. );
  62. foreach ($result as $row) {
  63. $target = $converter->load_array($row)->get_object();
  64. $target->message = $mapper->complete($target->message);
  65. array_push($campaigns, $target);
  66. }
  67. return $campaigns;
  68. }
  69. public function load_next(campaign_type $type) : ?campaign {
  70. $converter = new campaign_type_converter();
  71. $filters = [];
  72. $filters['finalized'] = null;
  73. $filters['type'] = $converter->load_enum($type)->get_string();
  74. $nexts = $this->load_all($filters);
  75. if (empty($nexts)) {
  76. return null;
  77. }
  78. return $nexts[0];
  79. }
  80. public function save(campaign $target) : ?campaign {
  81. if (!$target->has_id()) {
  82. throw $this->get_blank_id_exception();
  83. }
  84. $converter = new campaigns_converter();
  85. $converter->load_object($target);
  86. $condition = [];
  87. $condition['id'] = $target->get_id();
  88. $result = $this->get_database()->update(
  89. $this->get_tables()->campaigns(),
  90. $converter->get_array(),
  91. $condition
  92. );
  93. if ($result === false) {
  94. throw $this->get_exception('save');
  95. }
  96. return $this->complete($target);
  97. }
  98. }