Newer
Older
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
<?php
namespace Drupal\simple_sitemap\Queue;
use Drupal\Core\Queue\DatabaseQueue;
/**
* Class SimplesitemapQueue
* @package Drupal\simple_sitemap\Queue
*/
class SimplesitemapQueue extends DatabaseQueue {
/**
* Overrides \Drupal\Core\Queue\DatabaseQueue::claimItem().
*
* Unlike \Drupal\Core\Queue\DatabaseQueue::claimItem(), this method provides
* a default lease time of 0 (no expiration) instead of 30. This allows the
* item to be claimed repeatedly until it is deleted.
*/
public function claimItem($lease_time = 0) {
try {
$item = $this->connection->queryRange('SELECT data, item_id FROM {queue} q WHERE name = :name ORDER BY item_id ASC', 0, 1, [':name' => $this->name])->fetchObject();
if ($item) {
$item->data = unserialize($item->data);
return $item;
}
}
catch (\Exception $e) {
$this->catchException($e);
}
return FALSE;
}
public function createItems($data_sets) {
$try_again = FALSE;
try {
$id = $this->doCreateItems($data_sets);
}
catch (\Exception $e) {
// If there was an exception, try to create the table.
if (!$try_again = $this->ensureTableExists()) {
// If the exception happened for other reason than the missing table,
// propagate the exception.
throw $e;
}
}
// Now that the table has been created, try again if necessary.
if ($try_again) {
$id = $this->doCreateItems($data_sets);
}
return $id;
}
protected function doCreateItems($data_sets) {
$query = $this->connection->insert(static::TABLE_NAME)
->fields(['name', 'data', 'created']);
foreach ($data_sets as $i => $data) {
$query->values([
$this->name,
serialize($data),
time(),
]);
}
return $query->execute();
}
public function deleteItems($item_ids) {
try {
$this->connection->delete(static::TABLE_NAME)
->condition('item_id', $item_ids, 'IN')
->execute();
}
catch (\Exception $e) {
$this->catchException($e);
}
}
}