-
-
Notifications
You must be signed in to change notification settings - Fork 806
/
DemoQueue.php
96 lines (86 loc) · 2.84 KB
/
DemoQueue.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
require_once 'CRM/Core/Page.php';
/**
* An example page which queues several tasks and then executes them
*/
class CRM_Demoqueue_Page_DemoQueue extends CRM_Core_Page {
function run() {
$queueName = 'demoqueue_' . time();
$queue = Civi::queue($queueName, [
'type' => 'Sql',
'runner' => 'task',
'error' => 'abort',
]);
for ($i = 0; $i < 5; $i++) {
$queue->createItem(new CRM_Queue_Task(
['CRM_Demoqueue_Page_DemoQueue', 'doMyWork'], // callback
[$i, "Task $i takes $i second(s)"], // arguments
"Task $i" // title
));
if ($i == 2) {
$queue->createItem(new CRM_Queue_Task(
['CRM_Demoqueue_Page_DemoQueue', 'addMoreWork'], // callback
[], // arguments
"Add More Work" // title
));
}
}
\Civi\Api4\UserJob::create()->setValues([
'job_type' => 'contact_import',
'status_id:name' => 'in_progress',
'queue_id.name' => $queue->getName(),
])->execute();
$runner = new CRM_Queue_Runner([
'title' => ts('Demo Queue Runner'),
'queue' => $queue,
// Deprecated; only works on AJAX runner // 'onEnd' => ['CRM_Demoqueue_Page_DemoQueue', 'onEnd'],
'onEndUrl' => CRM_Utils_System::url('civicrm/demo-queue/done'),
]);
$runner->runAllInteractive(); // does not return
}
/**
* Perform some business logic
* @param \CRM_Queue_TaskContext $ctx
* @param $delay
* @param $message
* @return bool
*/
static function doMyWork(CRM_Queue_TaskContext $ctx, $delay, $message) {
sleep(1);
//sleep($delay);
//$ctx->log->info($message); // PEAR Log interface
//$ctx->logy->info($message); // PEAR Log interface -- broken, PHP error
//CRM_Core_DAO::executeQuery('select from alsdkjfasdf'); // broken, PEAR error
//throw new Exception('whoz'); // broken, exception
return TRUE; // success
}
/**
* Perform some business logic
* @param \CRM_Queue_TaskContext $ctx
* @return bool
*/
static function addMoreWork(CRM_Queue_TaskContext $ctx) {
sleep(1);
for ($i = 0; $i < 5; $i++) {
$ctx->queue->createItem(new CRM_Queue_Task(
['CRM_Demoqueue_Page_DemoQueue', 'doMyWork'], // callback
[$i, "Extra task $i takes $i second(s)"], // arguments
"Extra Task $i" // title
), [
'weight' => -1,
]);
}
return TRUE; // success
}
/**
* Handle the final step of the queue
* @param \CRM_Queue_TaskContext $ctx
*/
static function onEnd(CRM_Queue_TaskContext $ctx) {
//CRM_Utils_System::redirect('civicrm/demo-queue/done');
CRM_Core_Error::debug_log_message('finished task');
//$ctx->logy->info($message); // PEAR Log interface -- broken, PHP error
//CRM_Core_DAO::executeQuery('select from alsdkjfasdf'); // broken, PEAR error
//throw new Exception('whoz'); // broken, exception
}
}