AccessControl::PERMISSION_MANAGE_SUBSCRIBERS, ]; public function __construct( WP $wpSegment, CustomFieldsRepository $customFieldsRepository, ImportExportRepository $importExportRepository, NewsletterOptionsRepository $newsletterOptionsRepository, SegmentsRepository $segmentsRepository, SegmentSaveController $segmentSavecontroller, SegmentsResponseBuilder $segmentsResponseBuilder, CronWorkerScheduler $cronWorkerScheduler, SubscribersRepository $subscribersRepository, TagRepository $tagRepository, Validator $validator ) { $this->wpSegment = $wpSegment; $this->customFieldsRepository = $customFieldsRepository; $this->importExportRepository = $importExportRepository; $this->newsletterOptionsRepository = $newsletterOptionsRepository; $this->segmentsRepository = $segmentsRepository; $this->subscriberRepository = $subscribersRepository; $this->segmentSavecontroller = $segmentSavecontroller; $this->cronWorkerScheduler = $cronWorkerScheduler; $this->segmentsResponseBuilder = $segmentsResponseBuilder; $this->tagRepository = $tagRepository; $this->validator = $validator; } public function getMailChimpLists($data) { try { $mailChimp = new MailChimp($data['api_key']); $lists = $mailChimp->getLists(); return $this->successResponse($lists); } catch (\Exception $e) { return $this->errorResponse([ $e->getCode() => $e->getMessage(), ]); } } public function getMailChimpSubscribers($data) { try { $mailChimp = new MailChimp($data['api_key']); $subscribers = $mailChimp->getSubscribers($data['lists']); return $this->successResponse($subscribers); } catch (\Exception $e) { return $this->errorResponse([ $e->getCode() => $e->getMessage(), ]); } } public function addSegment($data) { try { $data['name'] = isset($data['name']) ? sanitize_text_field($data['name']) : ''; $data['description'] = isset($data['description']) ? sanitize_textarea_field($data['description']) : ''; $segment = $this->segmentSavecontroller->save($data); $response = $this->segmentsResponseBuilder->build($segment); return $this->successResponse($response); } catch (ValidationException $exception) { return $this->badRequest([ APIError::BAD_REQUEST => __('Please specify a name.', 'mailpoet'), ]); } catch (ConflictException $exception) { return $this->badRequest([ APIError::BAD_REQUEST => __('Another record already exists. Please specify a different "name".', 'mailpoet'), ]); } } public function processImport($data) { try { $import = new Import( $this->wpSegment, $this->customFieldsRepository, $this->importExportRepository, $this->newsletterOptionsRepository, $this->subscriberRepository, $this->tagRepository, $this->validator, json_decode($data, true) ); $process = $import->process(); return $this->successResponse($process); } catch (\Exception $e) { return $this->errorResponse([ $e->getCode() => $e->getMessage(), ]); } } public function processExport($data) { try { $export = new Export( $this->customFieldsRepository, $this->importExportRepository, $this->segmentsRepository, json_decode($data, true) ); $process = $export->process(); return $this->successResponse($process); } catch (\Exception $e) { return $this->errorResponse([ $e->getCode() => $e->getMessage(), ]); } } public function setupWooCommerceInitialImport() { try { $this->cronWorkerScheduler->scheduleImmediatelyIfNotRunning(WooCommerceSync::TASK_TYPE); return $this->successResponse(); } catch (\Exception $e) { return $this->errorResponse([ $e->getCode() => $e->getMessage(), ]); } } }