check_request_apikey($request)) { return $this->bad_apikey_response(); } $response = new response_builder(); return $response ->set_code(response_code::SUCCESS) ->set_status(response_status::SUCCESS) ->set_message('List of messages to send.') ->set_content($this->load_messages()) ->build(); } private function load_messages() : array { $this->prepare(); $next_campaign = $this->select_campaign(); if ($next_campaign === null) { return []; } $customers = $this->load_customers($next_campaign); $list = []; foreach ($customers as $customer) { $count = [ 'Message' => $next_campaign->message->content, 'PhoneNumber' => $customer->phone_number, 'Campaign' => $next_campaign->get_id() ]; array_push($list, $count); // FIX FOR CxSMS app $this->send_log_repository->mark_send($next_campaign, $customer); } if (empty($list)) { $next_campaign->finalize(); $this->campaigns_repository->save($next_campaign); } return $list; } private function select_campaign() : ?campaign { return $this->campaigns_repository->load_next(campaign_type::sms); } private function load_customers(campaign $next) : array { return $this->send_log_repository->load_all( $next, $this->get_settings()->get('sms_count'), false ); } private function prepare() : void { $this->campaigns_repository = new campaigns_repository( $this->get_database(), $this->get_tables() ); $this->send_log_repository = new send_log_repository( $this->get_database(), $this->get_tables() ); $this->customers_mapper = new customers_mapper( $this->get_database(), $this->get_tables() ); $this->messages_mapper = new messages_mapper( $this->get_database(), $this->get_tables() ); } private campaigns_repository $campaigns_repository; private send_log_repository $send_log_repository; private customers_mapper $customers_mapper; private messages_mapper $messages_mapper; }