diff --git a/csv/control.zaf b/csv/control.zaf index bc9c39e..c1f3845 100644 --- a/csv/control.zaf +++ b/csv/control.zaf @@ -21,6 +21,7 @@ Depends-opkg: busybox php Install-bin: get_fields.php get_rows.php Install-files: functions.inc.php +Install-cmd: register send Item discovery.fields: Parameters:: @@ -38,6 +39,7 @@ Item discovery.rows: Parameters:: csv '' '' columns '1-100' '' + rows '1-1000' '' header 1 '' delimiter ',' '' :: diff --git a/csv/functions.inc.php b/csv/functions.inc.php index bb8c5d6..2c68b10 100644 --- a/csv/functions.inc.php +++ b/csv/functions.inc.php @@ -49,3 +49,20 @@ function json_end() { echo ' ] }'."\n"; } +function get_replacements($header,$row) { + $patterns=Array(); + $replacements=Array(); + foreach ($header as $n=>$h) { + $patterns[]="/{COLUMN:$n}/"; + $replacements[]=$row[$n]; + $patterns[]="/{COLUMN:$h}/"; + $replacements[]=$row[$n]; + $patterns[]="/{column:$n}/"; + $replacements[]=strtolower($row[$n]); + $patterns[]="/{column:$h}/"; + $replacements[]=strtolower($row[$n]); + } + return(Array("patterns" => $patterns, "replacements" => $replacements)); +} + + diff --git a/csv/get_fields.php b/csv/get_fields.php index c471b94..2e946e7 100644 --- a/csv/get_fields.php +++ b/csv/get_fields.php @@ -14,12 +14,15 @@ fclose($c); json_init(); -$last=end($header); +$last1=end($header); +$last2=end($range); + foreach ($header as $num=>$column) { if (!array_key_exists($num,$range)) continue; json_row(); - json_column("FIELD","$column",true); - json_row_end($last==$column); + json_column("COLUMN",$num); + json_column("NAME",addslashes($column),true); + json_row_end($last1==$column||$last2==($num+1)); } json_end(); diff --git a/csv/get_rows.php b/csv/get_rows.php index 1abb24b..ae045a6 100644 --- a/csv/get_rows.php +++ b/csv/get_rows.php @@ -5,6 +5,8 @@ require_once(__DIR__."/functions.inc.php"); $csv=getenv("csv"); $range=parse_colnum(getenv("columns")); +$rows=parse_colnum(getenv("rows")); +$rowsf=array_flip($rows); $rangef=array_flip($range); $head=getenv("header"); $delim=getenv("delimiter"); @@ -25,16 +27,19 @@ if ($head) { json_init(); $line=0; $last=end($range); +$lastrow=max($rows); while ($row=fgetcsv($c,false,$delim)) { $line++; + if (!array_key_exists($line,$rowsf)) continue; json_row(); json_column("ROW","$line"); foreach ($range as $num) { - json_column("FIELD$num",$header[$num]); - json_column("VALUE$num",$row[$num],$last==$num); + $col=$num-1; + json_column("COLUMN$col",$header[$col]); + json_column("VALUE$col",addslashes($row[$col]),$last==$num); } - json_row_end(feof($c)); + json_row_end(feof($c)||$line==$lastrow); } json_end(); diff --git a/csv/register b/csv/register new file mode 100644 index 0000000..5ce15ca --- /dev/null +++ b/csv/register @@ -0,0 +1,38 @@ +#!/usr/bin/php + $key, + "field" => $field + ); +} + +$c=fopen($csv,"r"); + +$header=fgetcsv($c,false,$delim); + +$data=""; +while ($row=fgetcsv($c,false,$delim)) { + $p=get_replacements($header,$row); + foreach ($items as $item) { + $data.=sprintf("%s %s %s\n", + getenv("ZAF_HOSTNAME"), + preg_replace($p["patterns"],$p["replacements"],$item["key"]), + preg_replace($p["patterns"],$p["replacements"],$item["field"]) + ); + } +} + +fclose($c); + +if ($mode=="send") { + $h = popen(getenv("ZAF_BIN")." send", "w"); + fputs($h,$data); + fclose($h); + exit; +} +if ($mode=="stdout") { + echo $data; + exit; +} + +fprintf(STDERR,"Bad mode $mode\n!"); +exit(1); + + +