| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- namespace cx_newsletter;
- class campaigns_repository
- extends repository {
- public function create(campaign $target) : campaign {
- if ($target->has_id()) {
- throw $this->get_has_id_exception();
- }
- $converter = new campaigns_converter();
- $converter->load_object($target);
- $result = $this->get_database()->insert(
- $this->get_tables()->campaigns(),
- $converter->get_array()
- );
- if ($result === false) {
- throw $this->get_exception('create');
- }
- return $this->complete(
- new campaign($this->get_database()->insert_id)
- );
- }
- public function complete(campaign $target) : campaign {
- if (!$target->has_id()) {
- throw $this->get_blank_id_exception();
- }
- $query = new \cx_appengine\string_builder();
- $query->push('select * ');
- $query->push('from '.$this->get_tables()->campaigns().' ');
- $query->push('where id=%d');
- $sql = $this->get_database()->prepare($query, $target->get_id());
- $row = $this->get_database()->get_row($sql, ARRAY_A);
- if ($row === null ) {
- throw $this->get_exception('complete');
- }
- $converter = new campaigns_converter();
- $converter->load_array($row);
- $target = $converter->get_object();
-
- $mapper = new messages_mapper(
- $this->get_database(),
- $this->get_tables()
- );
- $target->message = $mapper->complete($target->message);
- return $target;
- }
- public function load_all(array $filters = [], ?int $limit = null) : array {
- $query = new \cx_appengine\string_builder();
- $query->push('select * ');
- $query->push('from '.$this->get_tables()->campaigns().' ');
- $query->push($this->parse_filters($filters));
- $query->push($this->parse_limit($limit));
- $query->push('order by id desc');
- $result = $this->get_database()->get_results($query->get(), ARRAY_A);
- if ($result === null) {
- throw $this->get_exception('load_all');
- }
- $campaigns = [];
- $converter = new campaigns_converter();
- $mapper = new messages_mapper(
- $this->get_database(),
- $this->get_tables()
- );
- foreach ($result as $row) {
- $target = $converter->load_array($row)->get_object();
- $target->message = $mapper->complete($target->message);
- array_push($campaigns, $target);
- }
- return $campaigns;
- }
- public function load_next(campaign_type $type) : ?campaign {
- $converter = new campaign_type_converter();
- $filters = [];
- $filters['finalized'] = null;
- $filters['type'] = $converter->load_enum($type)->get_string();
- $nexts = $this->load_all($filters);
-
- if (empty($nexts)) {
- return null;
- }
-
- return $nexts[0];
- }
- public function save(campaign $target) : ?campaign {
- if (!$target->has_id()) {
- throw $this->get_blank_id_exception();
- }
- $converter = new campaigns_converter();
- $converter->load_object($target);
- $condition = [];
- $condition['id'] = $target->get_id();
- $result = $this->get_database()->update(
- $this->get_tables()->campaigns(),
- $converter->get_array(),
- $condition
- );
- if ($result === false) {
- throw $this->get_exception('save');
- }
- return $this->complete($target);
- }
- }
|