]> git.mxchange.org Git - friendica.git/blob - src/Model/ItemDeliveryData.php
e3be073e8e86bba0b53a594ca7709766405a0f75
[friendica.git] / src / Model / ItemDeliveryData.php
1 <?php
2
3 /**
4  * @file src/Model/ItemDeliveryData.php
5  */
6
7 namespace Friendica\Model;
8
9 use Friendica\Database\DBA;
10
11 class ItemDeliveryData
12 {
13         const FIELD_LIST = [
14                 // Legacy fields moved from item table
15                 'postopts',
16                 'inform',
17                 // New delivery fields with virtual field name in item fields
18                 'queue_count' => 'delivery_queue_count',
19                 'queue_done'  => 'delivery_queue_done',
20         ];
21
22         /**
23          * Extract delivery data from the provided item fields
24          *
25          * @param array $fields
26          * @return array
27          */
28         public static function extractFields(array &$fields)
29         {
30                 $delivery_data = [];
31                 foreach (ItemDeliveryData::FIELD_LIST as $key => $field) {
32                         if (is_int($key) && isset($fields[$field])) {
33                                 // Legacy field moved from item table
34                                 $delivery_data[$field] = $fields[$field];
35                                 $fields[$field] = null;
36                         } elseif (isset($fields[$field])) {
37                                 // New delivery field with virtual field name in item fields
38                                 $delivery_data[$key] = $fields[$field];
39                                 unset($fields[$field]);
40                         }
41                 }
42
43                 return $delivery_data;
44         }
45
46         /**
47          * Increments the queue_done for the given item ID.
48          *
49          * Avoids racing condition between multiple delivery threads.
50          *
51          * @param integer $item_id
52          * @return bool
53          */
54         public static function incrementQueueDone($item_id)
55         {
56                 return DBA::e('UPDATE `item-delivery-data` SET `queue_done` = `queue_done` + 1 WHERE `iid` = ?', $item_id);
57         }
58
59         /**
60          * Insert a new item delivery data entry
61          *
62          * @param integer $item_id
63          * @param array   $fields
64          * @return bool
65          */
66         public static function insert($item_id, array $fields)
67         {
68                 if (empty($item_id)) {
69                         throw new \BadMethodCallException('Empty item_id');
70                 }
71
72                 $fields['iid'] = $item_id;
73
74                 return DBA::insert('item-delivery-data', $fields);
75         }
76
77         /**
78          * Update/Insert item delivery data
79          *
80          * If you want to update queue_done, please use incrementQueueDone instead.
81          *
82          * @param integer $item_id
83          * @param array   $fields
84          * @return bool
85          */
86         public static function update($item_id, array $fields)
87         {
88                 if (empty($item_id)) {
89                         throw new \BadMethodCallException('Empty item_id');
90                 }
91
92                 if (empty($fields)) {
93                         // Nothing to do, update successful
94                         return true;
95                 }
96
97                 return DBA::update('item-delivery-data', $fields, ['iid' => $item_id], true);
98         }
99
100         /**
101          * Delete item delivery data
102          *
103          * @param integer $item_id
104          * @return bool
105          */
106         public static function delete($item_id)
107         {
108                 if (empty($item_id)) {
109                         throw new \BadMethodCallException('Empty item_id');
110                 }
111
112                 return DBA::delete('item-delivery-data', ['iid' => $item_id]);
113         }
114 }