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