%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/pn/beta/64801_wp-content/plugins/mailpoet/lib/Models/
Upload File :
Create Path :
Current File : /var/www/pn/beta/64801_wp-content/plugins/mailpoet/lib/Models/SendingQueue.php

<?php
namespace MailPoet\Models;

use MailPoet\Util\Helpers;
use MailPoet\WP\Emoji;
use MailPoet\Tasks\Subscribers as TaskSubscribers;

if(!defined('ABSPATH')) exit;

class SendingQueue extends Model {
  public static $_table = MP_SENDING_QUEUES_TABLE;
  const STATUS_COMPLETED = 'completed';
  const STATUS_SCHEDULED = 'scheduled';
  const STATUS_PAUSED = 'paused';
  const PRIORITY_HIGH = 1;
  const PRIORITY_MEDIUM = 5;
  const PRIORITY_LOW = 10;

  function __construct() {
    parent::__construct();

    $this->addValidations('newsletter_rendered_body', array(
      'validRenderedNewsletterBody' => __('Rendered newsletter body is invalid!', 'mailpoet')
    ));
  }

  function task() {
    return $this->hasOne(__NAMESPACE__ . '\ScheduledTask', 'id', 'task_id');
  }

  function newsletter() {
    return $this->has_one(__NAMESPACE__ . '\Newsletter', 'id', 'newsletter_id');
  }

  function pause() {
    if($this->count_processed === $this->count_total) {
      return false;
    } else {
      return $this->task()->findOne()->pause();
    }
  }

  function resume() {
    if($this->count_processed === $this->count_total) {
      return $this->complete();
    } else {
      return $this->task()->findOne()->resume();
    }
  }

  function complete() {
    return $this->task()->findOne()->complete();
  }

  function save() {
    $this->newsletter_rendered_body = $this->getNewsletterRenderedBody();
    if(!Helpers::isJson($this->newsletter_rendered_body) && !is_null($this->newsletter_rendered_body)) {
      $this->set(
        'newsletter_rendered_body',
        json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
      );
    }
    if(!Helpers::isJson($this->meta)) {
      $this->set(
        'meta',
        json_encode($this->meta)
      );
    }
    parent::save();
    $this->newsletter_rendered_body = $this->getNewsletterRenderedBody();
    return $this;
  }

  /**
   * Used only for checking processed subscribers in old queues
   */
  private function getSubscribers() {
    if(!is_serialized($this->subscribers)) {
      return $this->subscribers;
    }
    $subscribers = unserialize($this->subscribers);
    if(empty($subscribers['processed'])) {
      $subscribers['processed'] = array();
    }
    return $subscribers;
  }

  function getNewsletterRenderedBody($type = false) {
    $rendered_newsletter = $this->decodeRenderedNewsletterBodyObject($this->newsletter_rendered_body);
    return ($type && !empty($rendered_newsletter[$type])) ?
      $rendered_newsletter[$type] :
      $rendered_newsletter;
  }

  function getMeta() {
    return (Helpers::isJson($this->meta)) ? json_decode($this->meta, true) : $this->meta;
  }

  function encodeEmojisInBody($newsletter_rendered_body) {
    if(is_array($newsletter_rendered_body)) {
      foreach($newsletter_rendered_body as $key => $value) {
        $newsletter_rendered_body[$key] = Emoji::encodeForUTF8Column(
          self::$_table,
          'newsletter_rendered_body',
          $value
        );
      }
    }
    return $newsletter_rendered_body;
  }

  function decodeEmojisInBody($newsletter_rendered_body) {
    if(is_array($newsletter_rendered_body)) {
      foreach($newsletter_rendered_body as $key => $value) {
        $newsletter_rendered_body[$key] = Emoji::decodeEntities($value);
      }
    }
    return $newsletter_rendered_body;
  }

  function isSubscriberProcessed($subscriber_id) {
    if(!empty($this->subscribers)
      && ScheduledTaskSubscriber::getTotalCount($this->task_id) === 0
    ) {
      $subscribers = $this->getSubscribers();
      return in_array($subscriber_id, $subscribers['processed']);
    } else {
      if($task = $this->task()->findOne()) {
        $task_subscribers = new TaskSubscribers($task);
        return $task_subscribers->isSubscriberProcessed($subscriber_id);
      }
      return false;
    }
  }

  function asArray() {
    $model = parent::asArray();
    $model['newsletter_rendered_body'] = $this->getNewsletterRenderedBody();
    $model['meta'] = $this->getMeta();
    return $model;
  }

  private function decodeRenderedNewsletterBodyObject($rendered_body) {
    if(is_serialized($rendered_body)) {
      return $this->decodeEmojisInBody(unserialize($rendered_body));
    }
    if(Helpers::isJson($rendered_body)) {
      return $this->decodeEmojisInBody(json_decode($rendered_body, true));
    }
    return $rendered_body;
  }

  static function getTasks() {
    return ScheduledTask::table_alias('tasks')
    ->selectExpr('tasks.*')
    ->join(
      MP_SENDING_QUEUES_TABLE,
      'tasks.id = queues.task_id',
      'queues'
    );
  }

  static function joinWithTasks() {
    return static::table_alias('queues')
    ->join(
      MP_SCHEDULED_TASKS_TABLE,
      'tasks.id = queues.task_id',
      'tasks'
    );
  }

  static function joinWithSubscribers() {
    return static::joinWithTasks()
    ->join(
      MP_SCHEDULED_TASK_SUBSCRIBERS_TABLE,
      'tasks.id = subscribers.task_id',
      'subscribers'
    );
  }

  static function findTaskByNewsletterId($newsletter_id) {
    return static::getTasks()
    ->where('queues.newsletter_id', $newsletter_id);
  }
}

Zerion Mini Shell 1.0