Passed
Push — master ( 1d1c0d...40ae07 )
by Marcel
02:46
created

StorageController::update()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 3
nop 5
dl 0
loc 15
rs 9.9332
c 0
b 0
f 0
1
<?php
2
/**
3
 * Data Analytics
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the LICENSE.md file.
7
 *
8
 * @author Marcel Scherello <[email protected]>
9
 * @copyright 2020 Marcel Scherello
10
 */
11
12
namespace OCA\Analytics\Controller;
13
14
use OCA\Analytics\Db\StorageMapper;
15
use OCP\AppFramework\Controller;
16
use OCP\ILogger;
17
use OCP\IRequest;
18
19
class StorageController extends Controller
20
{
21
    private $logger;
22
    private $StorageMapper;
23
    private $ThresholdController;
24
25
    public function __construct(
26
        string $AppName,
27
        IRequest $request,
28
        ILogger $logger,
29
        StorageMapper $StorageMapper,
30
        ThresholdController $ThresholdController
31
    )
32
    {
33
        parent::__construct($AppName, $request);
34
        $this->logger = $logger;
35
        $this->StorageMapper = $StorageMapper;
36
        $this->ThresholdController = $ThresholdController;
37
    }
38
39
    /**
40
     * Get the items for the selected category
41
     *
42
     * @NoAdminRequired
43
     * @param $datasetMetadata
44
     * @param $objectDrilldown
45
     * @param $dateDrilldown
46
     * @return array
47
     */
48
    public function read($datasetMetadata, $objectDrilldown, $dateDrilldown)
49
    {
50
        $header = array();
51
        if ($objectDrilldown === 'true') $header['dimension1'] = $datasetMetadata['dimension1'];
52
        if ($dateDrilldown === 'true') $header['dimension2'] = $datasetMetadata['dimension2'];
53
        $header['dimension3'] = $datasetMetadata['dimension3'];
54
55
        $data = $this->StorageMapper->getData($datasetMetadata['id'], $objectDrilldown, $dateDrilldown);
56
57
        return empty($data) ? [
58
            'status' => 'nodata'
59
        ] : [
60
            'header' => $header,
61
            'data' => $data,
62
        ];
63
    }
64
65
    /**
66
     * Get the items for the selected category
67
     *
68
     * @NoAdminRequired
69
     * @param int $datasetId
70
     * @param $dimension1
71
     * @param $dimension2
72
     * @param $dimension3
73
     * @param string|null $user_id
74
     * @return array
75
     * @throws \Exception
76
     */
77
    public function update(int $datasetId, $dimension1, $dimension2, $dimension3, string $user_id = null)
78
    {
79
        $dimension3 = $this->floatvalue($dimension3);
80
81
        $validate = $this->ThresholdController->validate($datasetId, $dimension1, $dimension2, $dimension3);
82
        $action = $this->StorageMapper->createData($datasetId, $dimension1, $dimension2, $dimension3, $user_id);
83
84
        $insert = $update = 0;
85
        if ($action === 'insert') $insert = 1;
86
        elseif ($action === 'update') $update = 1;
87
88
        return [
89
            'insert' => $insert,
90
            'update' => $update,
91
            'validate' => $validate
92
        ];
93
    }
94
95
    /**
96
     * delete data
97
     *
98
     * @NoAdminRequired
99
     * @param int $datasetId
100
     * @param $dimension1
101
     * @param $dimension2
102
     * @return bool
103
     */
104
    public function delete(int $datasetId, $dimension1, $dimension2)
105
    {
106
        return $this->StorageMapper->deleteData($datasetId, $dimension1, $dimension2);
107
    }
108
109
    /**
110
     * Simulate delete data
111
     *
112
     * @NoAdminRequired
113
     * @param int $datasetId
114
     * @param $dimension1
115
     * @param $dimension2
116
     * @param $dimension3
117
     * @return array
118
     */
119
    public function deleteSimulate(int $datasetId, $dimension1, $dimension2, $dimension3)
120
    {
121
        return $this->StorageMapper->deleteDataSimulate($datasetId, $dimension1, $dimension2, $dimension3);
122
    }
123
124
    private function floatvalue($val)
125
    {
126
        $val = str_replace(",", ".", $val);
127
        $val = preg_replace('/\.(?=.*\.)/', '', $val);
128
        $val = preg_replace('/[^0-9-.]+/', '', $val);
129
        if (is_numeric($val)) {
130
            return number_format(floatval($val), 2, '.', '');
131
        } else {
132
            return false;
133
        }
134
    }
135
136
}