Skip to content

Instantly share code, notes, and snippets.

@ermst4r
Created October 5, 2016 15:43
Show Gist options
  • Select an option

  • Save ermst4r/72cbdd4521e4d0172660fe3122dad5df to your computer and use it in GitHub Desktop.

Select an option

Save ermst4r/72cbdd4521e4d0172660fe3122dad5df to your computer and use it in GitHub Desktop.
Taak
<?php
namespace tasks;
use enum\TaskTimes;
use models\general\AdvertiserTask;
use models\general\AdvertiserTaskQuery;
use models\general\CampaignSignup;
use models\general\CampaignTaskQuery;
use models\general\Cap;
use models\general\QuestionTask;
use models\general\QuestionTaskQuery;
/**
* Class Task
* @package tasks
*/
class Task {
/**
* @var null
*/
protected $campaign_id;
/**
* @var
*/
protected $person_id;
/**
* @var
*/
protected $advertiser_id;
/**
* @var array
*/
protected $params;
/**
* @param null $campaign_id
* @param null $person_id
* @param null $advertiser_id
* @param array $options
*/
public function __construct($campaign_id = null, $person_id = null, $advertiser_id = null, $options = []) {
$this->campaign_id = $campaign_id;
$this->person_id = $person_id;
$this->advertiser_id = $advertiser_id;
$this->options = $options;
}
/**
*
* Returns a list of the available Tasks
*
* @return array
*/
public static function listTasks() {
$tasks = [];
$excludes = ['.', '..', 'iTask.php', 'Task.php'];
$dir = __DIR__;
$dh = opendir($dir);
$files = [];
while (false !== ($filename = readdir($dh))) {
if (!in_array($filename, $excludes)) {
$files[] = $filename;
}
}
foreach ($files as $filename) {
$tasks[] = basename($filename, ".php");
}
return $tasks;
}
/**
*
* This method is called when a new signup is done. It enqueue's all tasks that need to be done.
*
* @param $campaign_id
* @param $person_id
*/
public static function enqueueNewSignupTasks($campaign_id, $person_id) {
$tasks = [];
// Taken ophalen die specifiek aan deze campagne zijn gekoppeld
$campaign_tasks = CampaignTaskQuery::getForExecutionTime($campaign_id, TaskTimes::NEW_SIGNUP);
$tasks = array_merge($tasks, self::prepareCampaignTasks($campaign_tasks, $person_id));
// Taken ophalen die specifiek bij adverteerders horen die aan deze campagne hangen
$advertiser_tasks = AdvertiserTaskQuery::getForExecutionTime($campaign_id, TaskTimes::NEW_SIGNUP);
$tasks = array_merge($tasks, self::prepareAdvertiserTasks($advertiser_tasks, $campaign_id, $person_id));
self::enqueueTasks($tasks);
}
/**
* @param Cap $cap
*/
public static function enqueueCapReachedTasks(Cap $cap) {
$tasks = [];
// Standaard taken die altijd moeten worden gedaan
// Mail sturen om aan te geven dat een cap bereikt is
// $task = new TestTask();
// $tasks[] = $task;
$mailTask = new CapReachedMail(null, null, null, ['cap_id' => $cap->getId()]);
$tasks[] = $mailTask;
// Taken ophalen die specifiek bij adverteerders horen die aan deze campagne hangen
$advertiser_tasks = AdvertiserTaskQuery::getForCapReachedTime($cap->getAdvertiserId());
$tasks = array_merge($tasks, self::prepareAdvertiserTasks($advertiser_tasks, null, null));
self::enqueueTasks($tasks);
}
/**
* @param $signup
*/
public static function enqueueEmailConfirmedTasks(CampaignSignup $signup) {
$tasks = [];
$campaign_id = $signup->getCampaignId();
$person_id = $signup->getPersonId();
// Taken ophalen die specifiek aan deze campagne zijn gekoppeld
$campaign_tasks = CampaignTaskQuery::getForExecutionTime($campaign_id, TaskTimes::EMAIL_CONFIRM);
$tasks = array_merge($tasks, self::prepareCampaignTasks($campaign_tasks, $person_id));
// Taken ophalen die specifiek bij adverteerders horen die aan deze campagne hangen
$advertiser_tasks = AdvertiserTaskQuery::getForExecutionTime($campaign_id, TaskTimes::EMAIL_CONFIRM);
$tasks = array_merge($tasks, self::prepareAdvertiserTasks($advertiser_tasks, $campaign_id, $person_id));
self::enqueueTasks($tasks);
}
/**
* @param $question_ids
* @param $person_id
* @param $campaign_id
*/
public static function enqueueQuestionsAnsweredTasks($question_ids, $person_id, $campaign_id) {
$tasks = [];
$question_tasks = QuestionTaskQuery::create()
->filterByQuestionId($question_ids)
->filterByActive(true)
->find();
$tasks = array_merge($tasks, self::prepareQuestionTasks($question_tasks, $campaign_id, $person_id));
self::enqueueTasks($tasks);
}
/**
* @param $campaign_tasks
* @param $person_id
* @return array
*/
private static function prepareCampaignTasks($campaign_tasks, $person_id) {
$tasks = [];
foreach ($campaign_tasks as $campaign_task) {
try {
$task = $campaign_task->prepare($person_id);
$tasks[] = $task;
} catch (\Exception $e) {
// TODO: kunnen hier iets doen, maar prepare logged zelf ook, en rethrowed.
}
}
return $tasks;
}
/**
* @param $advertiser_tasks
* @param $campaign_id
* @param $person_id
* @return array
*/
private static function prepareAdvertiserTasks($advertiser_tasks, $campaign_id, $person_id) {
$tasks = [];
foreach ($advertiser_tasks as $advertiser_task) {
try {
/* @var $advertiser_task AdvertiserTask */
$task = $advertiser_task->prepare($campaign_id, $person_id);
$tasks[] = $task;
} catch (\Exception $e) {
// TODO: kunnen hier iets doen, maar prepare logged zelf ook, en rethrowed.
}
}
return $tasks;
}
/**
* @param $question_tasks
* @param $campaign_id
* @param $person_id
* @return array
*/
private static function prepareQuestionTasks($question_tasks, $campaign_id, $person_id) {
$tasks = [];
foreach ($question_tasks as $question_task) {
/* @var $question_task QuestionTask */
try {
$task = $question_task->prepare($campaign_id, $person_id);
if ($task instanceof Task) {
$tasks[] = $task;
}
} catch (\Exception $e) {
// TODO: kunnen hier iets doen, maar prepare logged zelf ook, en rethrowed.
}
}
return $tasks;
}
/**
* @param $tasks
*/
private static function enqueueTasks($tasks) {
// Alle taken enqueuen
foreach ($tasks as $task) {
if ($task instanceof Task) {
$task->enqueue();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment