Commit | Line | Data |
---|---|---|
7f254ad8 AE |
1 | <?php |
2 | ||
3 | require_once 'CRM/Core/Page.php'; | |
4 | ||
5 | /** | |
6 | * An example page which queues several tasks and then executes them | |
7 | */ | |
8 | class CRM_Demoqueue_Page_DemoQueue extends CRM_Core_Page { | |
9 | const QUEUE_NAME = 'demo-queue'; | |
10 | ||
11 | function run() { | |
12 | $queue = CRM_Queue_Service::singleton()->create(array( | |
13 | 'type' => 'Sql', | |
14 | 'name' => self::QUEUE_NAME, | |
15 | 'reset' => TRUE, | |
16 | )); | |
17 | ||
18 | for ($i = 0; $i < 5; $i++) { | |
19 | $queue->createItem(new CRM_Queue_Task( | |
20 | array('CRM_Demoqueue_Page_DemoQueue', 'doMyWork'), // callback | |
21 | array($i, "Task $i takes $i second(s)"), // arguments | |
22 | "Task $i" // title | |
23 | )); | |
24 | if ($i == 2) { | |
25 | $queue->createItem(new CRM_Queue_Task( | |
26 | array('CRM_Demoqueue_Page_DemoQueue', 'addMoreWork'), // callback | |
27 | array(), // arguments | |
28 | "Add More Work" // title | |
29 | )); | |
30 | } | |
31 | } | |
32 | ||
33 | $runner = new CRM_Queue_Runner(array( | |
34 | 'title' => ts('Demo Queue Runner'), | |
35 | 'queue' => $queue, | |
36 | 'onEnd' => array('CRM_Demoqueue_Page_DemoQueue', 'onEnd'), | |
37 | 'onEndUrl' => CRM_Utils_System::url('civicrm/demo-queue/done'), | |
38 | )); | |
39 | $runner->runAllViaWeb(); // does not return | |
40 | } | |
41 | ||
42 | /** | |
43 | * Perform some business logic | |
44 | * @param \CRM_Queue_TaskContext $ctx | |
45 | * @param $delay | |
46 | * @param $message | |
47 | * @return bool | |
48 | */ | |
49 | static function doMyWork(CRM_Queue_TaskContext $ctx, $delay, $message) { | |
50 | sleep(1); | |
51 | //sleep($delay); | |
52 | //$ctx->log->info($message); // PEAR Log interface | |
53 | //$ctx->logy->info($message); // PEAR Log interface -- broken, PHP error | |
54 | //CRM_Core_DAO::executeQuery('select from alsdkjfasdf'); // broken, PEAR error | |
55 | //throw new Exception('whoz'); // broken, exception | |
56 | return TRUE; // success | |
57 | } | |
58 | ||
59 | /** | |
60 | * Perform some business logic | |
61 | * @param \CRM_Queue_TaskContext $ctx | |
62 | * @return bool | |
63 | */ | |
64 | static function addMoreWork(CRM_Queue_TaskContext $ctx) { | |
65 | sleep(1); | |
66 | for ($i = 0; $i < 5; $i++) { | |
67 | $ctx->queue->createItem(new CRM_Queue_Task( | |
68 | array('CRM_Demoqueue_Page_DemoQueue', 'doMyWork'), // callback | |
69 | array($i, "Extra task $i takes $i second(s)"), // arguments | |
70 | "Extra Task $i" // title | |
71 | ), array( | |
72 | 'weight' => -1, | |
73 | )); | |
74 | } | |
75 | return TRUE; // success | |
76 | } | |
77 | ||
78 | /** | |
79 | * Handle the final step of the queue | |
80 | * @param \CRM_Queue_TaskContext $ctx | |
81 | */ | |
82 | static function onEnd(CRM_Queue_TaskContext $ctx) { | |
83 | //CRM_Utils_System::redirect('civicrm/demo-queue/done'); | |
84 | CRM_Core_Error::debug_log_message('finished task'); | |
85 | //$ctx->logy->info($message); // PEAR Log interface -- broken, PHP error | |
86 | //CRM_Core_DAO::executeQuery('select from alsdkjfasdf'); // broken, PEAR error | |
87 | //throw new Exception('whoz'); // broken, exception | |
88 | } | |
89 | } |