public function start()
 {
     if (!is_object($this->getTemplate())) {
         $this->setStatus('error-template');
         return;
     }
     if (!is_object($this->getSender())) {
         $this->setStatus('error-sender');
         return;
     }
     if (empty($this->_recipientgroups)) {
         $this->setStatus('error-recipients');
         return;
     }
     // Never start if the newsletter is sending or completed
     if ($this->getStatus() == 'sending' || $this->getStatus() == 'completed') {
         return;
     }
     $this->generatePAuth();
     Symphony::Database()->query("CREATE TABLE IF NOT EXISTS `tbl_tmp_email_newsletters_sent_" . $this->getId() . "` (\n          `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n          `email` varchar(255),\n          `result` varchar(255),\n          PRIMARY KEY (`id`),\n          KEY `email` (`email`)\n        ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;");
     Symphony::Database()->query('DELETE FROM `tbl_tmp_email_newsletters_sent_' . $this->getId() . '` WHERE `result` = \'idle\'');
     $this->setStatus('sending');
     $author_id = 0;
     if (Symphony::Engine() instanceof Administration) {
         $author_id = Symphony::Author()->get('id');
     } elseif (Symphony::Engine() instanceof Frontend && Symphony::ExtensionManager()->fetchStatus('members') == EXTENSION_ENABLED) {
         $Members = Symphony::ExtensionManager()->create('members');
         $author_id = $Members->getMemberDriver()->getMemberID();
     }
     Symphony::Database()->update(array('started_on' => date('Y-m-d H:i:s', time()), 'started_by' => $author_id), 'tbl_email_newsletters', 'id = ' . $this->getId());
     EmailBackgroundProcess::spawnProcess($this->getId(), $this->getPAuth());
 }
require_once DOCROOT . '/symphony/lib/boot/bundle.php';
//Inside bundle.php, the error_reporting is set again, but we don't want to be stopped by any other than fatal errors.
error_reporting(0);
require_once DOCROOT . '/symphony/lib/core/class.symphony.php';
require_once DOCROOT . '/symphony/lib/core/class.administration.php';
GenericErrorHandler::$enabled = false;
// ENM Specific includes & defines
define_safe('ENM_DIR', DOCROOT . '/extensions/email_newsletter_manager');
define_safe('ETM_DIR', DOCROOT . '/extensions/email_template_manager');
require_once ENM_DIR . '/lib/class.sendermanager.php';
require_once ENM_DIR . '/lib/class.recipientgroupmanager.php';
require_once ENM_DIR . '/lib/class.emailnewslettermanager.php';
require_once ENM_DIR . '/lib/class.emailbackgroundprocess.php';
// Needed to __construct() the Symphony class.
// This in turn is needed to get the Symphony::Database() functions working.
$thing = Administration::instance();
try {
    $newsletter = EmailNewsletterManager::create($newsletter_id);
    if (is_a($newsletter, 'EmailNewsletter')) {
        $newsletter->setPId(getmypid());
        $sending_settings = $newsletter->getSender()->about();
        if ($newsletter->sendBatch($process_auth) != 'completed') {
            time_sleep_until($start_time + $sending_settings['throttle-time']);
            EmailBackgroundProcess::spawnProcess($newsletter_id, $process_auth);
        }
    } else {
        throw new Exception('Newsletter with id: ' . $newsletter_id . ' not found.');
    }
} catch (Exception $e) {
    file_put_contents(DOCROOT . '/manifest/newsletter-log.txt', '[' . DateTimeObj::get('Y/m/d H:i:s') . '] newsletter-id: ' . $newsletter_id . ' - ' . $e->getMessage() . "\r\n", FILE_APPEND);
}