Passed
Push — master ( 5493ac...37f48a )
by Marcel
02:13
created

DataService::deleteDataByDataset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 1
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 2019 Marcel Scherello
10
 */
11
12
namespace OCA\Analytics\Service;
13
14
use OCA\Analytics\Activity\ActivityManager;
15
use OCA\Analytics\Controller\DbController;
16
use OCP\ILogger;
17
18
class DataService
19
{
20
    private $logger;
21
    private $DatasetService;
22
    private $DBController;
23
    private $ActivityManager;
24
25
    public function __construct(
26
        ILogger $logger,
27
        DatasetService $DatasetService,
28
        DbController $DBController,
29
        ActivityManager $ActivityManager
30
    )
31
    {
32
        $this->logger = $logger;
33
        $this->DatasetService = $DatasetService;
34
        $this->DBController = $DBController;
35
        $this->ActivityManager = $ActivityManager;
36
    }
37
38
    /**
39
     * Get the items for the selected category
40
     *
41
     * @NoAdminRequired
42
     * @param $datasetMetadata
43
     * @param $objectDrilldown
44
     * @param $dateDrilldown
45
     * @return array
46
     */
47
    public function read($datasetMetadata, $objectDrilldown, $dateDrilldown)
48
    {
49
        $header = array();
50
        if ($objectDrilldown === 'true') $header['dimension1'] = $datasetMetadata['dimension1'];
51
        if ($dateDrilldown === 'true') $header['dimension2'] = $datasetMetadata['dimension2'];
52
        $header['dimension3'] = $datasetMetadata['dimension3'];
53
54
        $data = $this->DBController->getData($datasetMetadata['id'], $objectDrilldown, $dateDrilldown);
55
56
        $result = empty($data) ? [
57
            'status' => 'nodata'
58
        ] : [
59
            'header' => $header,
60
            'data' => $data
61
        ];
62
        return $result;
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
     * @return string
74
     */
75
    public function update(int $datasetId, $dimension1, $dimension2, $dimension3)
76
    {
77
        //$this->logger->error($dimension3);
78
        $dimension3 = str_replace(',', '.', $dimension3);
79
        $action = $this->DBController->createData($datasetId, $dimension1, $dimension2, $dimension3);
80
        return $action;
81
    }
82
83
    /**
84
     * Get the items for the selected category
85
     *
86
     * @NoAdminRequired
87
     * @param int $datasetId
88
     * @param $import
89
     * @return array
90
     */
91
    public function import($datasetId, $import)
92
    {
93
        $insert = 0;
94
        $update = 0;
95
        $delimiter = $this->detectDelimiter($import);
96
        $rows = str_getcsv($import, "\n");
97
98
        foreach ($rows as &$row) {
99
            $row = str_getcsv($row, $delimiter);
100
            $action = $this->DBController->createData($datasetId, $row[0], $row[1], $row[2]);
101
            if ($action === 'insert') $insert++;
102
            elseif ($action === 'update') $update++;
103
        }
104
105
        $result = [
106
            'insert' => $insert,
107
            'update' => $update,
108
            'delimiter' => $delimiter
109
        ];
110
111
        $this->ActivityManager->triggerEvent($datasetId, ActivityManager::OBJECT_DATA, ActivityManager::SUBJECT_DATA_ADD);
112
        return $result;
113
    }
114
115
    /**
116
     * Delete all deta of a dataset
117
     *
118
     * @NoAdminRequired
119
     * @param int $datasetId
120
     * @return bool
121
     */
122
    public function deleteDataByDataset($datasetId)
123
    {
124
        $this->DBController->deleteDataByDataset($datasetId);
125
        return true;
126
    }
127
128
    private function detectDelimiter($data)
129
    {
130
        $delimiters = ["\t", ";", "|", ","];
131
        $data_2 = null;
132
        $delimiter = $delimiters[0];
133
        foreach ($delimiters as $d) {
134
            $firstRow = str_getcsv($data, "\n")[0];
135
            $data_1 = str_getcsv($firstRow, $d);
136
            if (sizeof($data_1) > sizeof($data_2)) {
137
                $delimiter = $d;
138
                $data_2 = $data_1;
139
            }
140
        }
141
142
        return $delimiter;
143
    }
144
145
}