/adei/ui

To get this branch, use:
bzr branch http://darksoft.org/webbzr/adei/ui

« back to all changes in this revision

Viewing changes to system/import.php

  • Committer: Suren A. Chilingaryan
  • Date: 2008-04-02 10:23:22 UTC
  • Revision ID: csa@dside.dyndns.org-20080402102322-okib92sicg2dx3o3
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
## Configuration
 
4
 
 
5
$config = array (
 
6
    "db_server" => "katrin", 
 
7
    "db_name" => "hauptspektrometer"
 
8
);
 
9
## We expecting GMT timezone, if it is not the case please specify 
 
10
## valid timezone
 
11
#$timezone = "Europe/Berlin";
 
12
 
 
13
## By default, we are inserting everything found in CSV file, if you need
 
14
## only to add missing values, please specify the writeout interval in 
 
15
## seconds (i.e. if the gap between two records in the current database
 
16
## exceed this value, then it would be filled from CSV file).
 
17
#$frequency = 60;
 
18
 
 
19
## Try to clean invalid values from database (only for the data we have)
 
20
#$clean = 1;
 
21
 
 
22
 
 
23
require("../adei.php");
 
24
 
 
25
$adei_timezone = date_default_timezone_get();
 
26
 
 
27
function Find(&$ginfo, $sn) {
 
28
    $res = array();
 
29
    foreach (array_keys($ginfo) as $gid) {
 
30
        $size = sizeof($ginfo[$gid]['items']);
 
31
        for ($i=0;$i<$size;$i++) {
 
32
            if (strstr($ginfo[$gid]['items'][$i]['name'], $sn)) {
 
33
                array_push($res, array(
 
34
                    "gid" => $gid,
 
35
                    "i" => $i
 
36
                ));
 
37
            }
 
38
        }
 
39
    }
 
40
    return $res;
 
41
}
 
42
 
 
43
 
 
44
 
 
45
if ((!isset($_SERVER['argc']))||($_SERVER['argc']<2)) {
 
46
    echo translate("You should supply CSV file as an argument") . "\n";
 
47
    exit;
 
48
}
 
49
 
 
50
$f = fopen($_SERVER['argv'][1],"r");
 
51
if (!$f) {
 
52
    echo translate("File \"%s\" is could not be openned", $_SERVER['argv'][1]) . "\n";
 
53
    exit;
 
54
}
 
55
 
 
56
if ($clean) {
 
57
    fgets($f);
 
58
    $from = 0; $to = 0;
 
59
    while (!feof($f)) {
 
60
        $string = fgets($f);
 
61
 
 
62
        $pos = strpos($string, ",");
 
63
        if (!$pos) continue;
 
64
    
 
65
        if ($timezone) date_default_timezone_set($timezone);
 
66
        $time = strtotime(substr($string, 0, $pos));
 
67
        if ($timezone) date_default_timezone_set($adei_timezone);
 
68
    
 
69
        if (!$from) $from = $to = $time;
 
70
        else {
 
71
            if ($time > $to) $to = $time;
 
72
            elseif ($time < $from) $from = $time;
 
73
        }
 
74
    }
 
75
 
 
76
    rewind($f);
 
77
}
 
78
 
 
79
 
 
80
$req = new SOURCERequest($config);
 
81
$reader = $req->CreateReader(REQUEST::READER_FORBID_CACHEREADER);
 
82
$ginfo = $reader->GetGroupList(READER::NEED_INFO|READER::NEED_ITEMINFO);
 
83
 
 
84
foreach (array_keys($ginfo) as $gid) {
 
85
    $size = sizeof($ginfo[$gid]['items']);
 
86
    $groups[$gid] = array("items"=>false, "size"=>$size);
 
87
    for ($i=0;$i<$size;$i++) $groups[$gid][$i] = -1;
 
88
}
 
89
 
 
90
 
 
91
$namestr = fgets($f);
 
92
$names = split(',', preg_replace('/(^\s+|\s+$)/', "", $namestr));
 
93
unset($names[0]);
 
94
 
 
95
 
 
96
foreach ($names as $pos => $name) {
 
97
    $sn = strstr($name, "\\");
 
98
    if ($sn) $sn = substr($sn, 1);
 
99
    else $sn = $name;
 
100
    
 
101
    $res = Find($ginfo, $sn);
 
102
    if ((!sizeof($res))&&(preg_match("/IST(WERT)?$/", $sn))) {
 
103
        $sn = preg_replace("/[._]?IST(WERT)?$/", "", $sn);
 
104
        $res = Find($ginfo, $sn);
 
105
    }
 
106
 
 
107
    if ((!sizeof($res))&&(preg_match("/_/", $sn))) {
 
108
        $sn = preg_replace("/^[^_]+_/", "", $sn);
 
109
        $res = Find($ginfo, $sn);
 
110
    }
 
111
    
 
112
    switch(sizeof($res)) {
 
113
        case 0: 
 
114
            echo translate("Missing column   : %u(%s)", $pos, $name) . "\n";
 
115
        break;
 
116
        case 1:
 
117
        break;
 
118
        default:
 
119
            echo translate("Multimatch column: %u(%s):", $pos, $name);
 
120
            $output = false;
 
121
            foreach ($res as $r) {
 
122
                if ($output) echo ", ";
 
123
                else $output = true;
 
124
                
 
125
                echo $r['gid'] . "(" . $ginfo[$r['gid']]['items'][$r['i']]['name'] . ")";
 
126
            }
 
127
            echo "\n";
 
128
    }
 
129
    
 
130
    foreach ($res as $r) {
 
131
        $groups[$r['gid']][$r['i']] = $pos;
 
132
        $groups[$r['gid']]['items'] = true;
 
133
    }
 
134
}
 
135
 
 
136
echo "\n";
 
137
 
 
138
$output = false;
 
139
foreach ($groups as $gid=>$group) {
 
140
    if (!$group['items']) {
 
141
        if ($output) echo ", ";
 
142
        else {
 
143
            echo translate("Missing groups: ");
 
144
            $output = true;
 
145
        }
 
146
        
 
147
        $gname = preg_replace('/(^\s+|\s+$)/', "", $ginfo[$gid]['name']);
 
148
        echo $gid . "(" . $gname . ")";
 
149
    } 
 
150
}
 
151
 
 
152
if ($output) echo "\n";
 
153
 
 
154
foreach ($groups as $gid=>$group) {
 
155
    if ($group['items']) {
 
156
        $output = false;
 
157
        for ($i=0;$i<$group['size'];$i++) {
 
158
            if ($group[$i] < 0) {
 
159
                if ($output) echo ", ";
 
160
                else {
 
161
                    $gname = preg_replace('/(^\s+|\s+$)/', "", $ginfo[$gid]['name']);
 
162
                    echo translate("Group %u(%s) missing items: ", $gid, $gname);
 
163
                    $output = true;
 
164
                }
 
165
                echo $ginfo[$gid]['items'][$i]['name'];
 
166
            }
 
167
        }
 
168
        
 
169
        if ($output) echo "\n";
 
170
    }
 
171
}
 
172
 
 
173
 
 
174
echo translate("Procceed[Y/n]? ");
 
175
$answer = fgets(STDIN);
 
176
if (preg_match("/[nN]/", $answer)) exit;
 
177
 
 
178
 
 
179
foreach ($groups as $gid=>&$group) {
 
180
    if ($group['items']) {
 
181
        $gconfig = $config;
 
182
        $gconfig["db_group"] = $gid;
 
183
        $lgs[$gid] = $reader->CreateGroup($gconfig);
 
184
        $min[$gid] = 0;
 
185
        
 
186
        if ($clean) {   
 
187
            $reader->Clean($lgs[$gid], $from - $frequency - 1, $to + $frequency + 1);
 
188
        }
 
189
    }
 
190
}
 
191
 
 
192
while (!feof($f)) {
 
193
    $str = fgets($f);
 
194
    if (!$str) break;
 
195
    
 
196
    $values = split(',', preg_replace('/(^\s+|\s+$)/', "", $str));
 
197
    
 
198
    if ($timezone) date_default_timezone_set($timezone);
 
199
    $time = strtotime($values[0]);
 
200
    if ($timezone) date_default_timezone_set($adei_timezone);
 
201
    
 
202
#    print $values[0] . " = " . date("c", $time) . "\n";
 
203
#    echo $values[126] . "\n";
 
204
    unset($values[0]);
 
205
    
 
206
    foreach ($lgs as $gid=>&$lg) {
 
207
        if ($frequency) {
 
208
            $data = $reader->GetData($lg, max($min[$gid], $time - $frequency), $time + $frequency);
 
209
            $data->rewind();
 
210
        
 
211
            if ($data->valid()) continue;
 
212
        }
 
213
        
 
214
        $min[$gid] = $time + 1;
 
215
 
 
216
        $data = array("values"=>array());
 
217
 
 
218
        for ($i=0;$i<$groups[$gid]["size"];$i++) {
 
219
            if ($groups[$gid][$i])
 
220
                $data["values"][$i] = $values[$groups[$gid][$i]];
 
221
            else
 
222
                $data["values"][$i] = 0;
 
223
        }
 
224
        
 
225
        $reader->PushData($lg, $time, $data);
 
226
    }
 
227
}
 
228
 
 
229
 
 
230
?>
 
 
b'\\ No newline at end of file'