Commit 2501a7522b4343bc358ab46abcd5a06325bc4fe5

Authored by Mihail
1 parent 54ada04a

add value filter class

backend/components/parsers/CsvParser.php
@@ -6,10 +6,12 @@ @@ -6,10 +6,12 @@
6 * Time: 17:00 6 * Time: 17:00
7 */ 7 */
8 8
9 -namespace backend\components\parsers; 9 +namespace backend\components;
  10 +
10 11
11 use Yii; 12 use Yii;
12 use yii\base\ErrorException; 13 use yii\base\ErrorException;
  14 +use common\components\debug\CustomVarDamp;
13 15
14 class CsvParser implements \IteratorAggregate { 16 class CsvParser implements \IteratorAggregate {
15 17
@@ -30,6 +32,9 @@ class CsvParser implements \IteratorAggregate { @@ -30,6 +32,9 @@ class CsvParser implements \IteratorAggregate {
30 /** @var int - first column for parsing */ 32 /** @var int - first column for parsing */
31 private $first_column; 33 private $first_column;
32 34
  35 + /** @var array - array of headers values */
  36 + private $keys;
  37 +
33 public function setup( $file, $first_line, $first_column, $hasHeaderRow = TRUE, $delimiter = ';') 38 public function setup( $file, $first_line, $first_column, $hasHeaderRow = TRUE, $delimiter = ';')
34 { 39 {
35 40
@@ -72,23 +77,23 @@ class CsvParser implements \IteratorAggregate { @@ -72,23 +77,23 @@ class CsvParser implements \IteratorAggregate {
72 $return = []; 77 $return = [];
73 78
74 $line = 0; 79 $line = 0;
75 - $keys = NULL; 80 + $this->keys = NULL;
76 81
77 while (($row = $this->readRow()) !== FALSE) { 82 while (($row = $this->readRow()) !== FALSE) {
78 $line++; 83 $line++;
79 84
80 if ($this->hasHeaderRow) { 85 if ($this->hasHeaderRow) {
81 - if ($keys === NULL) {  
82 - $keys = array_values($row); 86 + if ($this->keys === NULL) {
  87 + $this->keys = array_values($row);
83 } else { 88 } else {
84 89
85 - if (count($keys) !== count($row)) { 90 + if (count($this->keys) !== count($row)) {
86 // 91 //
87 Yii::warning("Invalid columns detected on line #$line ."); 92 Yii::warning("Invalid columns detected on line #$line .");
88 return $return; 93 return $return;
89 } 94 }
90 95
91 - $return[] = array_combine($keys, $row); 96 + $return[] = array_combine($this->keys, $row);
92 } 97 }
93 } else { 98 } else {
94 $return[] = $row; 99 $return[] = $row;
@@ -112,17 +117,13 @@ class CsvParser implements \IteratorAggregate { @@ -112,17 +117,13 @@ class CsvParser implements \IteratorAggregate {
112 $dirt_value_arr = $this->file->fgetcsv( ); 117 $dirt_value_arr = $this->file->fgetcsv( );
113 $dirt_value_arr = array_slice( $dirt_value_arr, $this->first_column ); 118 $dirt_value_arr = array_slice( $dirt_value_arr, $this->first_column );
114 $clear_arr = Encoder::encodeArray( $this->in_charset, $this->out_charset, $dirt_value_arr ); 119 $clear_arr = Encoder::encodeArray( $this->in_charset, $this->out_charset, $dirt_value_arr );
  120 +
  121 +// if ($this->keys !== NULL)
  122 +// @$clear_arr[3] = ValueFilter::pricefilter($clear_arr[3]);
  123 +
115 return $clear_arr; 124 return $clear_arr;
116 125
117 } 126 }
118 127
119 -// private function encodeArray( $array_to_encode )  
120 -// {  
121 -// return array_map(function($array_to_encode) {  
122 -// return iconv( $this->in_charset, $this->out_charset, $array_to_encode );  
123 -// }, $array_to_encode);  
124 -//  
125 -// }  
126 -  
127 128
128 } 129 }
129 \ No newline at end of file 130 \ No newline at end of file
backend/components/parsers/Encoder.php
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 * Time: 13:36 6 * Time: 13:36
7 */ 7 */
8 8
9 -namespace backend\components\parsers; 9 +namespace backend\components;
10 10
11 // @todo add comments 11 // @todo add comments
12 class Encoder 12 class Encoder
backend/components/parsers/ParserHandler.php
1 <?php 1 <?php
2 -namespace backend\components\parsers; 2 +namespace backend\components;
3 3
4 use Yii; 4 use Yii;
5 5
backend/components/parsers/ValueFilter.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Cibermag
  5 + * Date: 31.08.2015
  6 + * Time: 12:50
  7 + */
  8 +
  9 +namespace backend\components;
  10 +
  11 +// класс который содержит преобразователи значений (фильтры) используемые при парсинге
  12 +class ValueFilter
  13 +{
  14 +
  15 + public static function pricefilter($str)
  16 + {
  17 + if ($str == '') {
  18 + $str = 0;
  19 + }
  20 + $str = trim(str_replace(",", ".", $str));
  21 + $str = preg_replace("/[^0-9.]+/", "", strtoupper($str));
  22 +
  23 + if ($str == '') {
  24 + return '';
  25 + }
  26 + $str = round( (float)$str, 2 );
  27 +
  28 + return $str;
  29 + }
  30 +
  31 + public static function boxfilter($str)
  32 + {
  33 + if ($str == '') {
  34 + $str = 0;
  35 + }
  36 + $str = trim(str_replace(",", ".", $str));
  37 + $str = preg_replace("/[^0-9.]+/", "", strtoupper($str));
  38 + if ($str == '') {
  39 + return '';
  40 + }
  41 + $str = round((int)$str, 2);
  42 +
  43 + return $str;
  44 + }
  45 +}
0 \ No newline at end of file 46 \ No newline at end of file
backend/controllers/SiteController.php
@@ -3,7 +3,7 @@ namespace backend\controllers; @@ -3,7 +3,7 @@ namespace backend\controllers;
3 3
4 use Yii; 4 use Yii;
5 use yii\filters\AccessControl; 5 use yii\filters\AccessControl;
6 -use backend\components\base\BaseController; 6 +use backend\components\BaseController;
7 use common\models\LoginForm; 7 use common\models\LoginForm;
8 use yii\filters\VerbFilter; 8 use yii\filters\VerbFilter;
9 9
backend/models/UploadFileParsingForm.php
@@ -3,7 +3,7 @@ namespace backend\models; @@ -3,7 +3,7 @@ namespace backend\models;
3 3
4 use yii\base\Model; 4 use yii\base\Model;
5 use yii\web\UploadedFile; 5 use yii\web\UploadedFile;
6 -use backend\components\parsers\ParserHandler; 6 +use backend\components\ParserHandler;
7 use Yii; 7 use Yii;
8 8
9 /** 9 /**
@@ -24,7 +24,7 @@ class UploadFileParsingForm extends Model @@ -24,7 +24,7 @@ class UploadFileParsingForm extends Model
24 public function rules() 24 public function rules()
25 { 25 {
26 return [ 26 return [
27 - [['file'], 'file'], //'extensions' => ['csv', 'xml'] ], 27 + [['file'], 'file', 'extensions' => ['csv', 'xml'] ],
28 ['first_line', 'integer'], 28 ['first_line', 'integer'],
29 ['first_column', 'integer'] 29 ['first_column', 'integer']
30 ]; 30 ];