2014-01-31 10:15:50 +02:00
|
|
|
<?php defined('SYSPATH') OR die('No direct script access.');
|
|
|
|
/**
|
|
|
|
* This is an automated task to create mailing tasks.
|
|
|
|
* It has no configurable options.
|
|
|
|
* @category Helpers
|
|
|
|
* @author Oreolek
|
|
|
|
* @license AGPL
|
|
|
|
**/
|
|
|
|
class Task_Prepare extends Minion_Task
|
|
|
|
{
|
|
|
|
protected $_options = array();
|
|
|
|
/**
|
2014-02-05 10:10:05 +02:00
|
|
|
* @param int $course course ID
|
2014-01-31 10:15:50 +02:00
|
|
|
**/
|
2014-02-05 10:10:05 +02:00
|
|
|
protected function prepare_course($course)
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2014-02-15 07:41:05 +02:00
|
|
|
if (is_null($course))
|
|
|
|
{
|
|
|
|
Log::instance()->add(Log::ERROR, 'Course ID is NULL when preparing');
|
|
|
|
return;
|
|
|
|
}
|
2014-02-05 10:10:05 +02:00
|
|
|
$count = Model_Course::count_letters($course);
|
2014-01-31 10:15:50 +02:00
|
|
|
if ($count == 0)
|
|
|
|
return;
|
2014-02-05 10:10:05 +02:00
|
|
|
$period = Model_Course::get_period($course);
|
|
|
|
$clients = Model_Course::get_client_ids($course, $period);
|
|
|
|
$letters = Model_Course::get_letter_ids($course);
|
2016-10-11 08:37:54 +03:00
|
|
|
if ( ! is_array($clients))
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2014-02-03 07:26:56 +02:00
|
|
|
$this->prepare_letters($clients, $letters, $period);
|
2014-01-31 10:15:50 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
foreach ($clients as $client)
|
|
|
|
{
|
2014-02-03 07:26:56 +02:00
|
|
|
$this->prepare_letters($client, $letters, $period);
|
2014-01-31 10:15:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-03 07:26:56 +02:00
|
|
|
protected function prepare_letters($client_id, $letter_ids, $period)
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2014-02-03 07:26:56 +02:00
|
|
|
if (Model_Task::check_period($client_id, $letter_ids, $period))
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2014-02-03 07:26:56 +02:00
|
|
|
$letter = Model_Task::next_unsent($client_id, $letter_ids);
|
|
|
|
if ($letter !== FALSE)
|
|
|
|
{
|
|
|
|
Model_Task::prepare($client_id, $letter);
|
|
|
|
}
|
2016-11-12 13:47:46 +02:00
|
|
|
} else {
|
2016-11-12 14:27:24 +02:00
|
|
|
echo "Letter won't be prepared because it's too early to send it.\n";
|
2014-01-31 10:15:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Prepare letters to be sent out.
|
2014-02-05 10:10:05 +02:00
|
|
|
* If a client received less letters from course than there is in course,
|
2014-01-31 10:15:50 +02:00
|
|
|
* a task is formed.
|
|
|
|
*
|
|
|
|
* @return null
|
|
|
|
*/
|
2016-11-12 12:24:55 +02:00
|
|
|
protected function _execute()
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2016-11-12 12:24:55 +02:00
|
|
|
$params = $this->get_options();
|
2014-01-31 10:15:50 +02:00
|
|
|
$db = Database::instance();
|
|
|
|
$db->begin();
|
|
|
|
try
|
|
|
|
{
|
2014-02-15 07:41:05 +02:00
|
|
|
// get courses which have subscribers
|
2014-02-05 10:10:05 +02:00
|
|
|
$courses = Model_Course::get_ids();
|
2016-10-11 08:37:54 +03:00
|
|
|
if ( ! is_array($courses))
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2014-02-05 10:10:05 +02:00
|
|
|
$this->prepare_course($courses);
|
2014-01-31 10:15:50 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2014-02-05 10:10:05 +02:00
|
|
|
foreach ($courses as $course)
|
2014-01-31 10:15:50 +02:00
|
|
|
{
|
2014-02-05 10:10:05 +02:00
|
|
|
$this->prepare_course($course);
|
2016-10-11 08:37:54 +03:00
|
|
|
}
|
2014-01-31 10:15:50 +02:00
|
|
|
}
|
|
|
|
$db->commit();
|
|
|
|
}
|
|
|
|
catch(Database_Exception $e)
|
|
|
|
{
|
|
|
|
$db->rollback();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|