Commit 1cc27986a6333a36df95b8027b73f208b3e7b08d

Authored by Mihail
1 parent 021773a2

merge with server

.gitignore
1 1 .idea
2   -/uploads
3 2 \ No newline at end of file
  3 +/uploads
  4 +/vendor
4 5 \ No newline at end of file
... ...
backend/controllers/ParserController.php
1 1 <?php
2 2 namespace backend\controllers;
3 3  
  4 +use common\components\parsers\MailParser;
4 5 use Yii;
5 6 use yii\data\ActiveDataProvider;
6 7 use yii\filters\AccessControl;
... ... @@ -53,6 +54,7 @@ class ParserController extends BaseController
53 54 public function actionIndex($mode = 0)
54 55 {
55 56 $model = new UploadFileParsingForm();
  57 + // $mail = new MailParser();
56 58 // установим режим, 0 - ручная загрузка, 1 - автозагрузка
57 59 $model->mode = $mode;
58 60 return $this->render('index', ['model' => $model]);
... ...
common/components/parsers/config.php
... ... @@ -52,7 +52,7 @@
52 52 ['console' =>
53 53 ['class' => 'yii\multiparser\XmlParser',
54 54 'node' => 'Товар',
55   - 'hasHeaderRow' => true,
  55 + 'has_header_row' => true,
56 56 'keys' => [
57 57 "BRAND" => 'Производитель',
58 58 "ARTICLE"=> 'Код',
... ... @@ -72,9 +72,9 @@
72 72 ['web' =>
73 73 ['class' => 'yii\multiparser\XlsxParser',
74 74 'path_for_extract_files' => \Yii::getAlias('@temp_upload') . '/',
  75 + 'has_header_row' => true,
75 76 'converter_conf' => [
76 77 'class' => 'common\components\parsers\CustomConverter',
77   - 'hasHeaderRow' => true,
78 78 'configuration' => ["string" => []],
79 79 ]
80 80 ],
... ...
composer.json
... ... @@ -18,6 +18,7 @@
18 18 "yiisoft/yii2": ">=2.0.6",
19 19 "yiisoft/yii2-bootstrap": "*",
20 20 "yiisoft/yii2-swiftmailer": "*",
  21 + "artweb/yii2-multiparser": "master-dev",
21 22 "yiisoft/yii2-imagine": "*"
22 23 },
23 24 "require-dev": {
... ...
composer.lock
... ... @@ -4,9 +4,55 @@
4 4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 5 "This file is @generated automatically"
6 6 ],
7   - "hash": "8580bd82955b1fbb80d47024e184056e",
  7 + "hash": "0a5f8749ae4c46cb2b7dd9d3f777c97c",
  8 + "content-hash": "4c396673df5a5e19daaa0f887579444c",
8 9 "packages": [
9 10 {
  11 + "name": "artweb/yii2-multiparser",
  12 + "version": "dev-master",
  13 + "source": {
  14 + "type": "git",
  15 + "url": "https://github.com/tsurkanovm/yii-multiparser.git",
  16 + "reference": "7a3cd2728c4b0c9db1b6bcea411f8df87b69ecd3"
  17 + },
  18 + "dist": {
  19 + "type": "zip",
  20 + "url": "https://api.github.com/repos/tsurkanovm/yii-multiparser/zipball/7a3cd2728c4b0c9db1b6bcea411f8df87b69ecd3",
  21 + "reference": "7a3cd2728c4b0c9db1b6bcea411f8df87b69ecd3",
  22 + "shasum": ""
  23 + },
  24 + "require": {
  25 + "yiisoft/yii2": "*"
  26 + },
  27 + "type": "library",
  28 + "autoload": {
  29 + "psr-4": {
  30 + "yii\\multiparser\\": "lib\\"
  31 + }
  32 + },
  33 + "notification-url": "https://packagist.org/downloads/",
  34 + "license": [
  35 + "MIT"
  36 + ],
  37 + "authors": [
  38 + {
  39 + "name": "Mihail Tsurkanov",
  40 + "email": "tsurkanovm@gmail.com",
  41 + "role": "Developer"
  42 + }
  43 + ],
  44 + "description": "This extension provides a Multiparser solution for Yii framework 2.0.",
  45 + "homepage": "https://github.com/tsurkanovm/yii-multiparser.git",
  46 + "keywords": [
  47 + "csv",
  48 + "parser",
  49 + "xlsx",
  50 + "xml",
  51 + "yii2"
  52 + ],
  53 + "time": "2015-10-26 10:04:39"
  54 + },
  55 + {
10 56 "name": "bower-asset/bootstrap",
11 57 "version": "v3.3.5",
12 58 "source": {
... ... @@ -317,6 +363,58 @@
317 363 "time": "2013-11-30 08:25:19"
318 364 },
319 365 {
  366 + "name": "imagine/imagine",
  367 + "version": "v0.5.0",
  368 + "source": {
  369 + "type": "git",
  370 + "url": "https://github.com/avalanche123/Imagine.git",
  371 + "reference": "f64ec666baaa800edcbf237db41121a569230709"
  372 + },
  373 + "dist": {
  374 + "type": "zip",
  375 + "url": "https://api.github.com/repos/avalanche123/Imagine/zipball/f64ec666baaa800edcbf237db41121a569230709",
  376 + "reference": "f64ec666baaa800edcbf237db41121a569230709",
  377 + "shasum": ""
  378 + },
  379 + "require": {
  380 + "php": ">=5.3.2"
  381 + },
  382 + "require-dev": {
  383 + "sami/sami": "dev-master"
  384 + },
  385 + "suggest": {
  386 + "ext-gd": "to use the GD implementation",
  387 + "ext-gmagick": "to use the Gmagick implementation",
  388 + "ext-imagick": "to use the Imagick implementation"
  389 + },
  390 + "type": "library",
  391 + "autoload": {
  392 + "psr-0": {
  393 + "Imagine": "lib/"
  394 + }
  395 + },
  396 + "notification-url": "https://packagist.org/downloads/",
  397 + "license": [
  398 + "MIT"
  399 + ],
  400 + "authors": [
  401 + {
  402 + "name": "Bulat Shakirzyanov",
  403 + "email": "mallluhuct@gmail.com",
  404 + "homepage": "http://avalanche123.com"
  405 + }
  406 + ],
  407 + "description": "Image processing for PHP 5.3",
  408 + "homepage": "http://imagine.readthedocs.org/",
  409 + "keywords": [
  410 + "drawing",
  411 + "graphics",
  412 + "image manipulation",
  413 + "image processing"
  414 + ],
  415 + "time": "2013-07-10 17:25:36"
  416 + },
  417 + {
320 418 "name": "swiftmailer/swiftmailer",
321 419 "version": "v5.4.1",
322 420 "source": {
... ... @@ -459,21 +557,21 @@
459 557 },
460 558 {
461 559 "name": "yiisoft/yii2-bootstrap",
462   - "version": "2.0.4",
  560 + "version": "2.0.5",
463 561 "source": {
464 562 "type": "git",
465 563 "url": "https://github.com/yiisoft/yii2-bootstrap.git",
466   - "reference": "1b6b1e61cf91c3cdd517d6a7e71d30bb212e4af0"
  564 + "reference": "1464f93834b1d5edb1f5625f7ffd6c3723fa4923"
467 565 },
468 566 "dist": {
469 567 "type": "zip",
470   - "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/1b6b1e61cf91c3cdd517d6a7e71d30bb212e4af0",
471   - "reference": "1b6b1e61cf91c3cdd517d6a7e71d30bb212e4af0",
  568 + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/1464f93834b1d5edb1f5625f7ffd6c3723fa4923",
  569 + "reference": "1464f93834b1d5edb1f5625f7ffd6c3723fa4923",
472 570 "shasum": ""
473 571 },
474 572 "require": {
475 573 "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*",
476   - "yiisoft/yii2": ">=2.0.4"
  574 + "yiisoft/yii2": ">=2.0.6"
477 575 },
478 576 "type": "yii2-extension",
479 577 "extra": {
... ... @@ -505,7 +603,7 @@
505 603 "bootstrap",
506 604 "yii2"
507 605 ],
508   - "time": "2015-05-10 22:08:17"
  606 + "time": "2015-09-23 17:48:24"
509 607 },
510 608 {
511 609 "name": "yiisoft/yii2-composer",
... ... @@ -555,6 +653,54 @@
555 653 "time": "2015-03-01 06:22:44"
556 654 },
557 655 {
  656 + "name": "yiisoft/yii2-imagine",
  657 + "version": "2.0.3",
  658 + "source": {
  659 + "type": "git",
  660 + "url": "https://github.com/yiisoft/yii2-imagine.git",
  661 + "reference": "0961343138b65bba447de84b2b300899617e6acc"
  662 + },
  663 + "dist": {
  664 + "type": "zip",
  665 + "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/0961343138b65bba447de84b2b300899617e6acc",
  666 + "reference": "0961343138b65bba447de84b2b300899617e6acc",
  667 + "shasum": ""
  668 + },
  669 + "require": {
  670 + "imagine/imagine": "0.5.*",
  671 + "yiisoft/yii2": "*"
  672 + },
  673 + "type": "yii2-extension",
  674 + "extra": {
  675 + "branch-alias": {
  676 + "dev-master": "2.0.x-dev"
  677 + }
  678 + },
  679 + "autoload": {
  680 + "psr-4": {
  681 + "yii\\imagine\\": ""
  682 + }
  683 + },
  684 + "notification-url": "https://packagist.org/downloads/",
  685 + "license": [
  686 + "BSD-3-Clause"
  687 + ],
  688 + "authors": [
  689 + {
  690 + "name": "Antonio Ramirez",
  691 + "email": "amigo.cobos@gmail.com"
  692 + }
  693 + ],
  694 + "description": "The Imagine integration for the Yii framework",
  695 + "keywords": [
  696 + "helper",
  697 + "image",
  698 + "imagine",
  699 + "yii2"
  700 + ],
  701 + "time": "2015-03-01 06:22:44"
  702 + },
  703 + {
558 704 "name": "yiisoft/yii2-swiftmailer",
559 705 "version": "2.0.4",
560 706 "source": {
... ... @@ -634,101 +780,6 @@
634 780 }
635 781 },
636 782 {
637   - "name": "composer/installers",
638   - "version": "v1.0.21",
639   - "source": {
640   - "type": "git",
641   - "url": "https://github.com/composer/installers.git",
642   - "reference": "d64e23fce42a4063d63262b19b8e7c0f3b5e4c45"
643   - },
644   - "dist": {
645   - "type": "zip",
646   - "url": "https://api.github.com/repos/composer/installers/zipball/d64e23fce42a4063d63262b19b8e7c0f3b5e4c45",
647   - "reference": "d64e23fce42a4063d63262b19b8e7c0f3b5e4c45",
648   - "shasum": ""
649   - },
650   - "replace": {
651   - "roundcube/plugin-installer": "*",
652   - "shama/baton": "*"
653   - },
654   - "require-dev": {
655   - "composer/composer": "1.0.*@dev",
656   - "phpunit/phpunit": "4.1.*"
657   - },
658   - "type": "composer-installer",
659   - "extra": {
660   - "class": "Composer\\Installers\\Installer",
661   - "branch-alias": {
662   - "dev-master": "1.0-dev"
663   - }
664   - },
665   - "autoload": {
666   - "psr-0": {
667   - "Composer\\Installers\\": "src/"
668   - }
669   - },
670   - "notification-url": "https://packagist.org/downloads/",
671   - "license": [
672   - "MIT"
673   - ],
674   - "authors": [
675   - {
676   - "name": "Kyle Robinson Young",
677   - "email": "kyle@dontkry.com",
678   - "homepage": "https://github.com/shama"
679   - }
680   - ],
681   - "description": "A multi-framework Composer library installer",
682   - "homepage": "http://composer.github.com/installers/",
683   - "keywords": [
684   - "Craft",
685   - "Dolibarr",
686   - "Hurad",
687   - "MODX Evo",
688   - "OXID",
689   - "SMF",
690   - "Thelia",
691   - "WolfCMS",
692   - "agl",
693   - "aimeos",
694   - "annotatecms",
695   - "bitrix",
696   - "cakephp",
697   - "chef",
698   - "codeigniter",
699   - "concrete5",
700   - "croogo",
701   - "dokuwiki",
702   - "drupal",
703   - "elgg",
704   - "fuelphp",
705   - "grav",
706   - "installer",
707   - "joomla",
708   - "kohana",
709   - "laravel",
710   - "lithium",
711   - "magento",
712   - "mako",
713   - "mediawiki",
714   - "modulework",
715   - "moodle",
716   - "phpbb",
717   - "piwik",
718   - "ppi",
719   - "puppet",
720   - "roundcube",
721   - "shopware",
722   - "silverstripe",
723   - "symfony",
724   - "typo3",
725   - "wordpress",
726   - "zend",
727   - "zikula"
728   - ],
729   - "time": "2015-02-18 17:17:01"
730   - },
731   - {
732 783 "name": "fzaninotto/faker",
733 784 "version": "v1.5.0",
734 785 "source": {
... ... @@ -815,55 +866,6 @@
815 866 "time": "2013-11-01 13:02:21"
816 867 },
817 868 {
818   - "name": "silverstripe/framework",
819   - "version": "3.1.13",
820   - "source": {
821   - "type": "git",
822   - "url": "https://github.com/silverstripe/silverstripe-framework.git",
823   - "reference": "04b803dfc6dc60f2e6a38fa74f957156230b54be"
824   - },
825   - "dist": {
826   - "type": "zip",
827   - "url": "https://api.github.com/repos/silverstripe/silverstripe-framework/zipball/04b803dfc6dc60f2e6a38fa74f957156230b54be",
828   - "reference": "04b803dfc6dc60f2e6a38fa74f957156230b54be",
829   - "shasum": ""
830   - },
831   - "require": {
832   - "composer/installers": "*",
833   - "php": ">=5.3.2"
834   - },
835   - "require-dev": {
836   - "phpunit/phpunit": "~3.7@stable"
837   - },
838   - "type": "silverstripe-module",
839   - "autoload": {
840   - "classmap": [
841   - "tests/behat/features/bootstrap"
842   - ]
843   - },
844   - "notification-url": "https://packagist.org/downloads/",
845   - "license": [
846   - "BSD-3-Clause"
847   - ],
848   - "authors": [
849   - {
850   - "name": "SilverStripe",
851   - "homepage": "http://silverstripe.com"
852   - },
853   - {
854   - "name": "The SilverStripe Community",
855   - "homepage": "http://silverstripe.org"
856   - }
857   - ],
858   - "description": "The SilverStripe framework",
859   - "homepage": "http://silverstripe.org",
860   - "keywords": [
861   - "framework",
862   - "silverstripe"
863   - ],
864   - "time": "2015-05-28 06:59:11"
865   - },
866   - {
867 869 "name": "yiisoft/yii2-codeception",
868 870 "version": "2.0.4",
869 871 "source": {
... ... @@ -1058,7 +1060,9 @@
1058 1060 ],
1059 1061 "aliases": [],
1060 1062 "minimum-stability": "stable",
1061   - "stability-flags": [],
  1063 + "stability-flags": {
  1064 + "artweb/yii2-multiparser": 20
  1065 + },
1062 1066 "prefer-stable": false,
1063 1067 "prefer-lowest": false,
1064 1068 "platform": {
... ...
vendor/composer/autoload_psr4.php
... ... @@ -7,6 +7,7 @@ $baseDir = dirname($vendorDir);
7 7  
8 8 return array(
9 9 'yii\\swiftmailer\\' => array($vendorDir . '/yiisoft/yii2-swiftmailer'),
  10 + 'yii\\multiparser\\' => array($vendorDir . '/artweb/yii2-multiparser/lib'),
10 11 'yii\\imagine\\' => array($vendorDir . '/yiisoft/yii2-imagine'),
11 12 'yii\\gii\\' => array($vendorDir . '/yiisoft/yii2-gii'),
12 13 'yii\\faker\\' => array($vendorDir . '/yiisoft/yii2-faker'),
... ...
vendor/composer/installed.json
... ... @@ -1043,5 +1043,52 @@
1043 1043 "imagine",
1044 1044 "yii2"
1045 1045 ]
  1046 + },
  1047 + {
  1048 + "name": "artweb/yii2-multiparser",
  1049 + "version": "dev-master",
  1050 + "version_normalized": "9999999-dev",
  1051 + "source": {
  1052 + "type": "git",
  1053 + "url": "https://github.com/tsurkanovm/yii-multiparser.git",
  1054 + "reference": "7a3cd2728c4b0c9db1b6bcea411f8df87b69ecd3"
  1055 + },
  1056 + "dist": {
  1057 + "type": "zip",
  1058 + "url": "https://api.github.com/repos/tsurkanovm/yii-multiparser/zipball/7a3cd2728c4b0c9db1b6bcea411f8df87b69ecd3",
  1059 + "reference": "7a3cd2728c4b0c9db1b6bcea411f8df87b69ecd3",
  1060 + "shasum": ""
  1061 + },
  1062 + "require": {
  1063 + "yiisoft/yii2": "*"
  1064 + },
  1065 + "time": "2015-10-26 10:04:39",
  1066 + "type": "library",
  1067 + "installation-source": "dist",
  1068 + "autoload": {
  1069 + "psr-4": {
  1070 + "yii\\multiparser\\": "lib\\"
  1071 + }
  1072 + },
  1073 + "notification-url": "https://packagist.org/downloads/",
  1074 + "license": [
  1075 + "MIT"
  1076 + ],
  1077 + "authors": [
  1078 + {
  1079 + "name": "Mihail Tsurkanov",
  1080 + "email": "tsurkanovm@gmail.com",
  1081 + "role": "Developer"
  1082 + }
  1083 + ],
  1084 + "description": "This extension provides a Multiparser solution for Yii framework 2.0.",
  1085 + "homepage": "https://github.com/tsurkanovm/yii-multiparser.git",
  1086 + "keywords": [
  1087 + "csv",
  1088 + "parser",
  1089 + "xlsx",
  1090 + "xml",
  1091 + "yii2"
  1092 + ]
1046 1093 }
1047 1094 ]
... ...
vendor/yiisoft/multiparser/Converter.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 31.08.2015
6   - * Time: 12:50
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -// класс который содержит преобразователи значений (фильтры) используемые при парсинге
12   -class Converter implements ConverterInterface
13   -{
14   -
15   - const METHOD_PREFIX = 'convertTo';
16   -
17   - //public $configuration = [];
18   -
19   - public static function convertToFloat($value)
20   - {
21   - if ($value == '') {
22   - $value = 0;
23   - }
24   - $value = trim(str_replace(",", ".", $value));
25   - $value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
26   -
27   - if ($value == '') {
28   - return '';
29   - }
30   - $value = round((float)$value, 2);
31   -
32   - return $value;
33   - }
34   -
35   - public static function convertToInteger($value)
36   - {
37   - if ($value == '') {
38   - $value = 0;
39   - }
40   - $value = trim(str_replace(",", ".", $value));
41   - $value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
42   - if ($value == '') {
43   - return '';
44   - }
45   - $value = round((int)$value, 2);
46   -
47   - return $value;
48   - }
49   -
50   - public static function convertToEncode($value)
51   - {
52   - $res = $value;
53   - if (is_array($value)) {
54   -
55   - $res = Encoder::encodeArray($value);
56   -
57   - } elseif (is_string($value)) {
58   -
59   - $res = Encoder::encodeString($value);
60   -
61   - }
62   - return $res;
63   - }
64   -
65   - public static function convertToString($value)
66   - {
67   - $convert_func = function ($value_to_convert) {
68   - return str_replace(array('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '~', '`', '"', "'", ' ', '№', '%', ';', ':', '[', ']', '{', '}', '*', '?', '/', '\'', '|', '.', ',', '<', '>', '\\'), '', $value_to_convert);
69   - };
70   -
71   - if( is_string( $value ) ){
72   - $value = $convert_func( $value );
73   - }
74   -
75   - if( is_array( $value ) ){
76   - array_walk( $value, $convert_func );
77   - }
78   -
79   - return $value;
80   - }
81   -
82   - /**
83   - * @param $name - имя метода конвертации
84   - * @param $value - значение на конвертацию
85   - * @return mixed
86   - */
87   - public static function __callStatic($name, $value)
88   - {
89   - $method_name = self::METHOD_PREFIX . $name;
90   -
91   - if (method_exists(static::class, $method_name)) {
92   - return static::$method_name($value[0]);
93   -
94   - } else {
95   - // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя
96   - return $value[0];
97   -
98   - }
99   - }
100   -
101   - public function __call($name, $params)
102   - {
103   - return self::__callStatic($name, $params);
104   - }
105   -
106   -
107   - /**
108   - * @param $arr - массив для конвертирования
109   - * @param $configuration - массив конфигурация конвертирования
110   - * @return mixed
111   - * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации)
112   - */
113   - public static function convertByConfiguration($arr, $configuration)
114   - {
115   - if ($hasKey = isset($configuration['hasKey']))
116   - unset($configuration['hasKey']);
117   -
118   - if (isset($configuration['configuration'])) {
119   - $arr_config = $configuration['configuration'];
120   - unset($configuration['configuration']);
121   - } else {
122   - throw new \Exception('Не указан обязательный параметр конфигурационного файла - converter_conf[configuration]');
123   - }
124   -
125   - // проставим аттрибуты из конфига{}{}
126   - self::setAttributes($configuration);
127   -
128   - foreach ($arr_config as $key => $value) {
129   - if ($hasKey) {
130   - // у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности
131   - if (is_array($value)) {
132   - //если пустой массив то конвертируем всю строку
133   - if (count($value) === 0) {
134   -
135   - $arr = self::$key($arr);
136   - continue;
137   - }
138   - // иначе конвертируем каждую ячейку в отдельности
139   - foreach ($value as $sub_value) {
140   - if (isset($arr[$sub_value])) {
141   - // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
142   - $arr[$sub_value] = self::$key($arr[$sub_value]);
143   - }
144   -
145   - }
146   - } else {
147   -
148   - if (isset($arr[$value])) {
149   - // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
150   - $arr[$value] = self::$key($arr[$value]);
151   - // CustomVarDamp::dump($result);
152   - }
153   -
154   - }
155   -
156   - } else {
157   - // нет заголовка - мы можем конвертировать только строку в целом
158   - $arr = self::$key($arr);
159   - }
160   -
161   - }
162   -
163   - return $arr;
164   - }
165   -
166   - public static function setAttributes($configuration)
167   - {
168   - foreach ($configuration as $key_setting => $setting) {
169   - if (property_exists(static::class, $key_setting))
170   - static::$$key_setting = $setting;
171   - }
172   -
173   - }
174   -
175   -
176   -}
177 0 \ No newline at end of file
vendor/yiisoft/multiparser/ConverterInterface.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Tsurkanov
5   - * Date: 20.10.2015
6   - * Time: 13:38
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -
12   -interface ConverterInterface {
13   -
14   - public static function convertByConfiguration( $arr_values_to_convert, $configuration );
15   -
16   -}
17 0 \ No newline at end of file
vendor/yiisoft/multiparser/CsvParser.php deleted
1   -<?php
2   -/**
3   -
4   - */
5   -namespace yii\multiparser;
6   -use common\components\CustomVarDamp;
7   -
8   -
9   -/**
10   - * Class CsvParser
11   - * @package yii\multiparser
12   - * @todo - перевести на анг. яз.
13   - */
14   -class CsvParser extends TableParser
15   -{
16   - /** @var string - разделитель csv */
17   - public $delimiter = ';';
18   -
19   -
20   -
21   - /**
22   - * метод устанвливает нужные настройки объекта SplFileObject, для работы с csv
23   - */
24   - public function setup()
25   - {
26   -
27   - $this->file->setCsvControl($this->delimiter);
28   - $this->file->setFlags(\SplFileObject::READ_CSV);
29   - $this->file->setFlags(\SplFileObject::SKIP_EMPTY);
30   -
31   - parent::setup();
32   -
33   - }
34   -
35   - public function read()
36   - {
37   - parent::read();
38   -
39   - return $this->result;
40   - }
41   -
42   -
43   - protected function readRow( )
44   - {
45   - $this->row = $this->file->fgetcsv();
46   - }
47   -
48   - protected function isEmptyRow(){
49   -
50   - $is_empty = false;
51   -
52   - if ($this->row === false || $this->row === NULL ) {
53   - return true;
54   - }
55   -
56   - $j = 0;
57   - for ($i = 1; $i <= count( $this->row ); $i++) {
58   -
59   - if ( $this->isEmptyColumn( $this->row[$i - 1] ) ) {
60   - $j++;
61   - }
62   -
63   - if ( $j >= $this->min_column_quantity ) {
64   - $is_empty = true;
65   - break;
66   - }
67   - }
68   -
69   - return $is_empty;
70   - }
71   -
72   - protected function isEmptyColumn( $val ){
73   - return $val == '';
74   - }
75   -}
76 0 \ No newline at end of file
vendor/yiisoft/multiparser/DynamicFormHelper.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 08.09.2015
6   - * Time: 14:50
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -use yii\base\DynamicModel;
12   -use yii\grid\GridView;
13   -use yii\grid\SerialColumn;
14   -use yii\helpers\ArrayHelper;
15   -
16   -/**
17   - * Class DynamicFormHelper
18   - * @package backend\components\parsers
19   - * Содержит процедуры генерации компонентов с динамическим количеством аттрибутов
20   - */
21   -class DynamicFormHelper
22   -{
23   -
24   - const KEY_PREFIX = 'attr_';
25   -
26   - /**
27   - * @param $source - int or array
28   - * если передан массив, то создается модель с атрибутами переданными в массиве,
29   - * ключ - имя, значение - значение аттрибута
30   - * если передано число, то создается переданное количество аттрибутов с именами - attr_0, attr_1...
31   - */
32   - public static function CreateDynamicModel( $source )
33   - {
34   - $arr_keys = [];
35   - if (is_array($source)) {
36   - $arr_keys = $source;
37   - } elseif (is_int($source)) {
38   -
39   - $i = 0;
40   - while ($source > $i) {
41   - $arr_keys[] = self::KEY_PREFIX . $i;
42   - $i++;
43   - }
44   - array_flip($arr_keys);
45   -
46   - }
47   -
48   - $model = new DynamicModel($arr_keys);
49   -
50   - return $model;
51   - }
52   -
53   - // @todo add comments
54   - public static function CreateGridWithDropDownListHeader( $dataProvider, $form, $header_model, $arr_header_values )
55   - {
56   - $columns_config = [['class' => SerialColumn::className()]];
57   - $i = 0;
58   - foreach( $header_model as $key => $value ) {
59   -
60   - $columns_config[] = ['header' => $form->field($header_model, $key, ['inputOptions' => ['label' => '']])->dropDownList($arr_header_values), 'attribute' => $i];
61   - $i++;
62   - }
63   - $dynamic_grid_view = GridView::widget( ['dataProvider' => $dataProvider,
64   - 'columns' => $columns_config ] );
65   -
66   - return $dynamic_grid_view;
67   -
68   - }
69   -
70   -}
71 0 \ No newline at end of file
vendor/yiisoft/multiparser/Encoder.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 27.08.2015
6   - * Time: 13:36
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -// @todo add comments
12   -class Encoder
13   -{
14   - /** @var out encoding charset */
15   - public static $out_charset = 'UTF-8';
16   - /** @var out encoding charset */
17   - public static $in_charset = 'windows-1251';
18   -
19   - public static function encodeFile($in_charset, $out_charset, $filePath)
20   - {
21   -
22   - $old_content = file_get_contents($filePath);
23   - $encode_content = self::encodeString( $old_content, $in_charset, $out_charset );
24   - $file = @fopen($filePath, "w");
25   - fwrite($file, $encode_content);
26   - @fclose($file);
27   - }
28   -
29   - public static function encodeArray( $array, $in_charset = '', $out_charset = '')
30   - {
31   - if ($in_charset)
32   - self::$in_charset = $in_charset;
33   -
34   - if ($out_charset)
35   - self::$out_charset = $out_charset;
36   -
37   - $result = array_map(
38   - function ($value) {
39   -
40   - return self::encodeString( $value, self::$in_charset, self::$out_charset );
41   -
42   - },
43   - $array);
44   -
45   - return $result;
46   - }
47   -
48   - public static function encodeString( $source, $in_charset = '', $out_charset = '' ){
49   -
50   - if ($in_charset)
51   - self::$in_charset = $in_charset;
52   -
53   - if ($out_charset)
54   - self::$out_charset = $out_charset;
55   -
56   - return iconv( self::$in_charset, self::$out_charset, $source );
57   -
58   - }
59   -}
60 0 \ No newline at end of file
vendor/yiisoft/multiparser/ObjectCreator.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Tsurkanov
5   - * Date: 20.10.2015
6   - * Time: 16:24
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -
12   -use common\components\CustomVarDamp;
13   -
14   -class ObjectCreator {
15   - public static function build( array $configuration ){
16   - if ( isset( $configuration['class'] ) ) {
17   - $class = trim( $configuration['class'] );
18   - unset( $configuration['class'] );
19   - } else{
20   - throw new \ErrorException('Error configuration - undefined class');
21   - }
22   -
23   - $object = new $class();
24   - foreach ($configuration as $name => $value) {
25   - $object->$name = $value;
26   - }
27   -
28   - return $object;
29   - }
30   -}
31 0 \ No newline at end of file
vendor/yiisoft/multiparser/Parser.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 04.09.2015
6   - * Time: 18:25
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -//@todo - заменить read на parse
12   -//@todo - xml - убрать из названий функций xml и array - это и так понятно
13   -
14   -
15   -use common\components\CustomVarDamp;
16   -
17   -abstract class Parser
18   -{
19   - public $converter_conf = [];
20   - protected $converter = NULL;
21   -
22   - /**
23   - * @var array - результирующий массив с отпарсенными значениями
24   - */
25   - protected $result = [];
26   -
27   - /** @var array - массив с заголовком,
28   - * */
29   - public $keys = NULL;
30   - /** @var bool
31   - имеет ли файл заголовок который будет установлен ключами возвращемого массива*/
32   - public $has_header_row = false;
33   -
34   - /** @var экземляр SplFileObject читаемого файла */
35   - public $file;
36   -
37   -
38   -
39   - public function setup()
40   - {
41   - $this->setupConverter();
42   - }
43   -
44   - protected function setupConverter()
45   - {
46   - if ( $this->has_header_row || $this->keys !== NULL ) {
47   - // если у файла есть заголовок, то в результате имеем ассоциативный массив
48   - $this->converter_conf['hasKey'] = 1;
49   - }
50   -
51   - if ( $this->converter_conf ) {
52   - $converter = ObjectCreator::build( $this->converter_conf );
53   - if ( $converter instanceof ConverterInterface ) {
54   -
55   - $this->converter = $converter;
56   -
57   - }
58   - }
59   -
60   -
61   - }
62   -
63   - public abstract function read();
64   -
65   - /**
66   - * @param $arr
67   - * @return mixed
68   - * преобразовует значения прочитанного массива в нужные типы, согласно конфигурации конвертера
69   - */
70   - protected function convert( $arr )
71   - {
72   -
73   - if ($this->converter !== NULL) {
74   -
75   - $arr = $this->converter->convertByConfiguration( $arr, $this->converter_conf );
76   -
77   - }
78   -
79   -
80   - return $arr;
81   -
82   - }
83   -}
84 0 \ No newline at end of file
vendor/yiisoft/multiparser/ParserHandler.php deleted
1   -<?php
2   -
3   -namespace yii\multiparser;
4   -
5   -use common\components\CustomVarDamp;
6   -
7   -class ParserHandler
8   -{
9   - //@todo - добавить комменты на анг язе (ошибки выкидывать тоже на англ яз.)
10   - //@todo - сделать универсальную обработку ошибок
11   - //@todo - возможно отказаться от YiiParserHandler
12   - const DEFAULT_MODE = 'web';
13   - /** @var string */
14   - protected $filePath;
15   -
16   - /** @var string */
17   - protected $configuration = [];
18   - /** @var string */
19   - protected $custom_configuration = [];
20   -
21   - /** @var instance of SplFileObject */
22   - protected $fileObject;
23   -
24   - /** @var string - extension of file $filePath */
25   - protected $extension;
26   -
27   - /** @var string - */
28   - protected $mode;
29   -
30   - /** @var string - */
31   - protected $options;
32   -
33   - /**
34   - * @param string first line in file for parsing
35   - */
36   - public function setup($filePath, $options = [])
37   - {
38   - $this->filePath = $filePath;
39   - if (isset($options['mode'])) {
40   -
41   - $this->mode = $options['mode'];
42   - unset($options['mode']);
43   -
44   - } else {
45   -
46   - $this->mode = self::DEFAULT_MODE;
47   -
48   - }
49   -
50   - $this->options = $options;
51   -
52   - $this->fileObject = new \SplFileObject($this->filePath, 'r');
53   -
54   - $options['file'] = $this->fileObject;
55   - $this->extension = $this->fileObject->getExtension();
56   -
57   - $this->custom_configuration = $this->getCustomConfiguration($this->extension, $this->mode);
58   - $this->custom_configuration = array_merge_recursive($this->custom_configuration, $options);
59   -
60   - }
61   -
62   - public function run()
63   - {
64   - $result = [];
65   - if (count($this->custom_configuration)) {
66   -
67   - $parser = $this->createObjectByConfiguration($this->custom_configuration);
68   -
69   - try {
70   -
71   - $parser->setup();
72   - $result = $parser->read();
73   -
74   - } catch (\ErrorException $e) {
75   -
76   - echo $e->getMessage();
77   -
78   - }
79   -
80   - }
81   -
82   - return $result;
83   - }
84   -
85   - public function getCustomConfiguration($extension, $parameter)
86   - {
87   - if (!count($this->configuration)) {
88   - $this->setConfiguration(require(__DIR__ . '/config.php'));
89   - }
90   -
91   - if (!isset($this->configuration[$extension])) {
92   - throw new \ErrorException("Parser do not maintain file with extension {$extension}");
93   - }
94   - if (!isset($this->configuration[$extension][$parameter])) {
95   - throw new \ErrorException("Parser configurator do not have settings for {$parameter} parameter");
96   - }
97   -
98   - return $this->configuration[$extension][$parameter];
99   - }
100   -
101   - public function setConfiguration($configuration)
102   - {
103   - $this->configuration = $configuration;
104   - }
105   -
106   - protected function createObjectByConfiguration($configuration)
107   - {
108   - return ObjectCreator::build($configuration);
109   - }
110   -}
111   -
112   -
vendor/yiisoft/multiparser/TableParser.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Tsurkanov
5   - * Date: 22.10.2015
6   - * Time: 15:53
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -
12   -use common\components\CustomVarDamp;
13   -
14   -abstract class TableParser extends Parser {
15   -
16   -
17   - /**
18   - * @var array - текущий отпарсенный ряд
19   - */
20   - protected $row = [];
21   -
22   - /** @var int - первая строка с которой начинать парсить */
23   - public $first_line = 0;
24   -
25   - /** @var int - последняя строка до которой парсить
26   - * если не указана, то парсинг происходит до конца файла*/
27   - public $last_line = 0;
28   -
29   - /** @var int - первая колонка файла с которой начнется парсинг */
30   - public $first_column = 0;
31   -
32   -
33   - /** @var bool
34   - нужно ли искать автоматически первоую значисмую строку (не пустая строка)
35   - * иначе первая строка будет взята из аттрибута $first_line */
36   - public $auto_detect_first_line = false;
37   -
38   - /** @var int - количество значимых колонок, что бы определить первую значимую строку
39   - * используется при автоопределении первой строки*/
40   - public $min_column_quantity = 5;
41   - /** @var int - количество пустых строк, что бы определить конец файла,
42   - такое количеество подряд пустых строк считается концом файла*/
43   - public $empty_lines_quantity = 3;
44   -
45   -
46   - /** @var int - номер текущей строки парсера */
47   - protected $current_row_number = 0;
48   -
49   -
50   - protected abstract function isEmptyRow();
51   -
52   - protected abstract function isEmptyColumn($column_value);
53   -
54   - protected abstract function readRow();
55   -
56   -
57   - public function read()
58   - {
59   - if ($this->auto_detect_first_line) {
60   - $this->shiftToFirstValuableLine();
61   - }
62   -
63   - // будем считать количество пустых строк подряд - при достижении $empty_lines_quantity - считаем что это конец файла и выходим
64   - $empty_lines = 0;
65   - while ( $empty_lines < $this->empty_lines_quantity ) {
66   - // прочтем строку из файла
67   - $this->readRow();
68   -
69   - if ( $this->isEmptyRow() ) {
70   - //счетчик пустых строк
71   - $empty_lines++;
72   - continue;
73   - }
74   -
75   - // уберем пустые колонки из ряда
76   - $this->filterRow();
77   -
78   -
79   - $this->adjustRowToSettings( );
80   -
81   - // строка не пустая, имеем прочитанный массив значений
82   - $this->current_row_number++;
83   -
84   - // для первой строки утановим ключи из заголовка
85   - $this->setKeysFromHeader();
86   -
87   - // если у нас установлен лимит, при его достижении прекращаем парсинг
88   - if ( $this->isLastLine() )
89   - break;
90   -
91   - // обнуляем счетчик, так как считаюся пустые строки ПОДРЯД
92   - $empty_lines = 0;
93   -
94   - $this->result[] = $this->row;
95   - $this->row = [];
96   -
97   - }
98   -
99   -
100   - }
101   - /**
102   - * определяет первую значимую строку,
103   - * считывается файл пока в нем не встретится строка с непустыми колонками
104   - * в количестве указанном в атрибуте min_column_quantity
105   - * в результате выполнения $current_row_number будет находится на последней незначимой строке
106   - */
107   - protected function shiftToFirstValuableLine()
108   - {
109   - do {
110   -
111   - $this->current_row_number ++;
112   - $this->readRow();
113   -
114   - } while( $this->isEmptyRow() );
115   -
116   - // @todo - сделать опционально
117   - // код для того что бы парсить первую строку, закомментировано как предполагается что первая значимая строка это заголовок
118   - // $this->current_row_number --;
119   -// $this->file->seek( $this->current_row_number );
120   - }
121   -
122   - /**
123   - * @return array - одномерный массив результата парсинга строки
124   - */
125   - protected function adjustRowToSettings( )
126   - {
127   -
128   - // если есть заголовок, то перед конвертацией его нужно назначить
129   - if ( $this->keys !== NULL ) {
130   -
131   - if (count($this->keys) !== count($this->row)) {
132   - throw new \Exception("Ошибка парсинга файла в строке # {$this->current_row_number}. Не соответсвие числа ключевых колонок (заголовка) - числу колонок с данными", 0, 1, $this->file->getBasename(), $this->current_row_number);
133   - }
134   -
135   - $this->row = array_combine($this->keys, $this->row);
136   - }
137   -
138   - // попытаемся конвертировать прочитанные значения согласно конфигурации котнвертера значений
139   - $this->row = $this->convert($this->row);
140   -
141   - // обрежем массив к первой значимой колонке
142   - if ( $this->first_column ) {
143   -
144   - $this->row = array_slice($this->row, $this->first_column);
145   -
146   - }
147   -
148   - }
149   -
150   - protected function setKeysFromHeader(){
151   - if ( $this->has_header_row ) {
152   - // в файле есть заголовок, но он еще не назначен - назначим
153   - if ($this->keys === NULL) {
154   - $this->keys = array_values( $this->row );
155   - }
156   - }
157   - }
158   -
159   - protected function filterRow(){
160   - $this->row = array_filter( $this->row, function($val){
161   - return !$this->isEmptyColumn($val);
162   - });
163   - }
164   -
165   - protected function isLastLine(){
166   -
167   - if ( ( $this->last_line ) && ( $this->current_row_number > $this->last_line ) ) {
168   - return true;
169   - }
170   - return false;
171   - }
172   -
173   -}
174 0 \ No newline at end of file
vendor/yiisoft/multiparser/XlsxParser.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Tsurkanov
5   - * Date: 21.10.2015
6   - * Time: 15:44
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -
12   -use common\components\CustomVarDamp;
13   -
14   -
15   -/**
16   - * Class XlsxParser
17   - * @package yii\multiparser
18   - */
19   -class XlsxParser extends TableParser {
20   -
21   - /**
22   - * @var string - путь куда будут распаковываться файлы, если не указанно - во временный каталог сервера
23   - */
24   - public $path_for_extract_files = '';
25   -
26   -
27   - /**
28   - * @var int - если указано то считывание будет производиться с этого листа, иначе со всех листов
29   - * при чтении со всех листов - выходной массив будет иметь номера листов первыми элементами
30   - */
31   - public $active_sheet = 0;
32   -
33   - protected $strings_arr = [];
34   - protected $sheets_arr = [];
35   -
36   - protected $current_node;
37   - protected $current_sheet;
38   -
39   - public function setup()
40   - {
41   -
42   - parent::setup();
43   -
44   - if ( $this->path_for_extract_files == '' ) {
45   - $this->path_for_extract_files = sys_get_temp_dir();
46   - }
47   - }
48   -
49   -
50   - public function read()
51   - {
52   -
53   - // $this->extractFiles();
54   -
55   - $this->readSheets();
56   - $this->readStrings();
57   -
58   - foreach ( $this->sheets_arr as $sheet ) {
59   - //проходим по всем файлам из директории /xl/worksheets/
60   -
61   - $sheet_path = $this->path_for_extract_files . '/xl/worksheets/' . $sheet . '.xml';
62   - if ( file_exists( $sheet_path ) && is_readable( $sheet_path ) ) {
63   -
64   - $xml = simplexml_load_file( $sheet_path, "SimpleXMLIterator" );
65   - $this->current_node = $xml->sheetData->row;
66   - $this->current_node->rewind();
67   -
68   - parent::read();
69   -
70   - }
71   -
72   - }
73   -CustomVarDamp::dumpAndDie($this->$result);
74   - // return $this->$result_arr;
75   - }
76   -
77   - protected function extractFiles ()
78   - {
79   - $zip = new \ZipArchive;
80   - if ( $zip->open( $this->file->getPathname() ) === TRUE ) {
81   - $zip->extractTo( $this->path_for_extract_files );
82   - $zip->close();
83   - } else {
84   - throw new \Exception( 'Ошибка чтения xlsx файла' );
85   - }
86   - }
87   -
88   - protected function readSheets ()
89   - {
90   - if ( $this->active_sheet ) {
91   - $this->sheets_arr[ $this->active_sheet ] = 'Sheet' . $this->active_sheet;
92   - return;
93   - }
94   -
95   - $xml = simplexml_load_file( $this->path_for_extract_files . '/xl/workbook.xml' );
96   - foreach ( $xml->sheets->children() as $sheet ) {
97   - $sheet_name = '';
98   - $sheet_id = 0;
99   - $attr = $sheet->attributes();
100   - foreach ( $attr as $name => $value ) {
101   - if ($name == 'name')
102   - $sheet_name = (string)$value;
103   -
104   - if ($name == 'sheetId')
105   - $sheet_id = $value;
106   -
107   - }
108   - if ( $sheet_name && $sheet_id ) {
109   - $this->sheets_arr[$sheet_name] = 'Sheet' . $sheet_id;
110   - }
111   -//
112   - }
113   - }
114   -
115   - protected function readStrings ()
116   - {
117   - $xml = simplexml_load_file( $this->path_for_extract_files . '/xl/sharedStrings.xml' );
118   - foreach ( $xml->children() as $item ) {
119   - $this->strings_arr[] = (string)$item->t;
120   - }
121   - }
122   -
123   -
124   -
125   - // protected function readRow ( $item, $sheet , $current_row )
126   - protected function readRow ( )
127   - {
128   - $node = $this->current_node->getChildren();
129   -
130   - foreach ( $node as $child ) {
131   - $attr = $child->attributes();
132   -
133   - if( isset($child->v) ) {
134   - $value = (string)$child->v;
135   - }else{
136   - $value = '';
137   - }
138   - if ( isset( $attr['t'] ) ) {
139   - // $this->result_arr[$sheet][$current_row][$cell] = $this->strings_arr[ $value ];
140   - $this->row[] = $this->strings_arr[ $value ];
141   - }else{
142   - // $this->result_arr[$sheet][$current_row][$cell] = $value;
143   - $this->row[] = $value;
144   - }
145   -
146   - }
147   - $this->current_node->next();
148   - CustomVarDamp::dump($this->row);
149   - }
150   -
151   - protected function isEmptyRow(){
152   -
153   - $is_empty = false;
154   -
155   - if ( !count( $this->row ) || !$this->current_node->valid() ) {
156   - return true;
157   - }
158   -
159   - $j = 0;
160   - for ($i = 1; $i <= count( $this->row ); $i++) {
161   -
162   - if ( $this->isEmptyColumn( $this->row[$i - 1] ) ) {
163   - $j++;
164   - }
165   -
166   - if ( $j >= $this->min_column_quantity ) {
167   - $is_empty = true;
168   - break;
169   - }
170   - }
171   -
172   - return $is_empty;
173   - }
174   -
175   - protected function isEmptyColumn( $val ){
176   - return $val == '';
177   - }
178   -}
179 0 \ No newline at end of file
vendor/yiisoft/multiparser/XmlParser.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 10.09.2015
6   - * Time: 17:47
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -
12   -use common\components\CustomVarDamp;
13   -use common\components\CustomArrayHelper;
14   -
15   -class XmlParser extends Parser{
16   -
17   - public $node;
18   -
19   - public function read()
20   - {
21   - $file = $this->file;
22   - $result = $this->xmlToArray( $file->getPathname() );
23   -
24   - if ( isset($this->node) ) {
25   -
26   - $result = $result[ $this->node ];
27   -
28   - }
29   -
30   - return $result;
31   - }
32   -
33   -
34   - /**
35   - * Converts an XML string to a PHP array
36   - *
37   - * @uses recursiveXMLToArray()
38   - * @param string $file_path
39   - * @return array
40   - */
41   - protected function xmlToArray( $file_path ) {
42   -
43   - try {
44   - $xml = new \SimpleXMLElement( $file_path, 0, true );
45   - //\common\components\CustomVarDamp::dumpAndDie($xml->children()->children());
46   - $result = $this->recursiveXMLToArray( $xml );
47   - } catch(Exception $ex) {
48   -
49   - throw $ex;
50   - }
51   -
52   - return $result;
53   - }
54   -
55   - /**
56   - * Convert a XML string to a PHP array recursively. Do not
57   - * call this function directly
58   - *
59   - * @param SimpleXMLElement
60   - *
61   - * @return mixed
62   - */
63   - protected function recursiveXMLToArray($xml) {
64   - if( $xml instanceof \SimpleXMLElement ) {
65   - $attributes = $xml->attributes();
66   -
67   - foreach( $attributes as $key => $value ) {
68   - if( $value ) {
69   - $attribute_array[$key] = (string) $value;
70   - }
71   - }
72   - $previous_xml = $xml;
73   - $xml = get_object_vars($xml);
74   - }
75   -
76   - if(is_array($xml)) {
77   -
78   - if( count($xml) == 0 )
79   - return (string) $previous_xml; // for CDATA
80   -
81   - foreach($xml as $key => $value) {
82   - $row[$key] = $this->recursiveXMLToArray($value);
83   - }
84   - if ( is_string($value) ) {
85   - // дошли до конца рекурсии
86   - // преобразуем ряд согласно конфигурации
87   - if ( $this->keys !== NULL ) {
88   - // назначим ключи из конфигурации, согласно массиву $keys
89   - $row = $this->compareArrayWithKeys( $row );
90   - }
91   - $row = $this->convert( $row );
92   -
93   - }
94   -
95   -
96   - if( isset( $attribute_array ) )
97   - $row['@'] = $attribute_array; // Attributes
98   -
99   - return $row;
100   - }
101   - return (string) $xml;
102   - }
103   -
104   - /**
105   - * @param array $value_arr - текущий ряд, массив, которому нужно назначить конфигурационные ключи ($keys)
106   - * @return array
107   - */
108   - protected function compareArrayWithKeys( array $value_arr ){
109   - $res = $this->keys;
110   - foreach ( $this->keys as $key => $value ) {
111   - if ( array_key_exists( $value, $value_arr ) ) {
112   - $res[$key] = $value_arr[$value];
113   - }
114   - }
115   - return $res;
116   - }
117   -
118   -}
119 0 \ No newline at end of file
vendor/yiisoft/multiparser/YiiConverter.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 07.09.2015
6   - * Time: 15:56
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -use common\components\CustomVarDamp;
12   -use yii\base\Component;
13   -use yii\base\ErrorException;
14   -
15   -
16   -class YiiConverter extends Component{
17   -
18   -public $configuration;
19   -public $converter;
20   -
21   - public function init()
22   - {
23   - parent::init();
24   - $converter = \Yii::createObject( $this->configuration );
25   - if ( $converter instanceof ConverterInterface ) {
26   -
27   - $this->converter = $converter;
28   - }else{
29   - throw new ErrorException('Wrong type of converter');
30   - }
31   -
32   -
33   - }
34   -
35   - public function convertTo( $method, $value, $attributes = [] ){
36   -
37   - if ( $attributes ) {
38   - $this->converter->setAttributes($attributes);
39   - }
40   - return $this->converter->$method( $value );
41   -
42   - }
43   -
44   - public function convertByConfiguration( $value, $configuration ){
45   -
46   - return $this->converter->convertByConfiguration( $value, $configuration );
47   -
48   - }
49   -
50   -
51   -}
52 0 \ No newline at end of file
vendor/yiisoft/multiparser/YiiMultiparser.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 07.09.2015
6   - * Time: 15:56
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -use common\components\CustomVarDamp;
12   -use yii\base\Component;
13   -
14   -
15   -
16   -
17   -class YiiMultiparser extends Component{
18   -
19   -public $configuration;
20   -public $parserHandler;
21   -
22   - public function init()
23   - {
24   - parent::init();
25   - $this->parserHandler = new YiiParserHandler( );
26   - $this->parserHandler->setConfiguration( $this->configuration );
27   -
28   - }
29   -
30   -
31   - public function parse( $filePath, $options = [] ){
32   -
33   - $this->parserHandler->setup( $filePath, $options );
34   -
35   - return $this->parserHandler->run();
36   -
37   - }
38   -
39   - public function getConfiguration( $extension, $parameter ){
40   -
41   - return $this->parserHandler->getCustomConfiguration( $extension, $parameter );
42   -
43   - }
44   -
45   -}
46 0 \ No newline at end of file
vendor/yiisoft/multiparser/YiiParserHandler.php deleted
1   -<?php
2   -/**
3   - * Created by PhpStorm.
4   - * User: Cibermag
5   - * Date: 07.09.2015
6   - * Time: 15:53
7   - */
8   -
9   -namespace yii\multiparser;
10   -
11   -
12   -use common\components\CustomVarDamp;
13   -
14   -class YiiParserHandler extends ParserHandler{
15   -
16   -
17   - /**
18   - * @param $filePath
19   - * @param array $options
20   - * проверяет читабельность переданного файла, а также наличие настроек парсера в конфигурационном файле для данного типа файла
21   - */
22   -// public function setup($filePath, $options = [])
23   -// {
24   -// $this->filePath = $filePath;
25   -// if (isset($options['mode'])) {
26   -//
27   -// $this->mode = $options['mode'];
28   -// unset($options['mode']);
29   -//
30   -// } else {
31   -//
32   -// $this->mode = self::DEFAULT_MODE;
33   -//
34   -// }
35   -//
36   -// $this->options = $options;
37   -//
38   -// try {
39   -// $this->fileObject = new \SplFileObject($this->filePath, 'r');
40   -// } catch (\ErrorException $e) {
41   -// // Yii::warning("Ошибка открытия файла {$this->filePath}");
42   -// echo "Ошибка открытия файла {$this->filePath}";
43   -// return [];
44   -// }
45   -//
46   -// $options['file'] = $this->fileObject;
47   -// $this->extension = $this->fileObject->getExtension();
48   -//
49   -// try {
50   -//
51   -// $this->configuration = array_merge_recursive ($this->configuration, $options);
52   -//
53   -// } catch (\ErrorException $e) {
54   -// echo $e->getMessage();
55   -// return [];
56   -// }
57   -//
58   -// }
59   -//
60   -// public function run()
61   -// {
62   -//
63   -// $result = [];
64   -//
65   -// // \common\components\CustomVarDamp::dumpAndDie($this);
66   -// if (count($this->configuration)) {
67   -// $parser = \Yii::createObject($this->configuration);
68   -//
69   -// try {
70   -//
71   -// $parser->setup();
72   -// $result = $parser->read();
73   -//
74   -// } catch (\ErrorException $e) {
75   -//
76   -// echo $e->getMessage();
77   -//
78   -// }
79   -//
80   -// }
81   -//
82   -// return $result;
83   -// }
84   - protected function createObjectByConfiguration($configuration)
85   - {
86   - return \Yii::createObject($configuration);
87   - }
88   -
89   -
90   -}
91 0 \ No newline at end of file
vendor/yiisoft/multiparser/config.php deleted
1   -<?php
2   -return
3   - [
4   - 'csv' =>
5   - ['web' =>
6   - ['class' => 'yii\multiparser\CsvParser',
7   - 'auto_detect_first_line' => true,
8   - 'converter_conf' => [
9   - "float" => 'PRICE',
10   - "integer" => 'QUANTITY',
11   - "string" => 'DESCR'
12   - ]],
13   - 'basic_column' => [
14   - "ARTICLE" => 'Артикул',
15   - "PRICE" => 'Цена',
16   - "DESCR" => 'Наименование',
17   - "QUANTITY" => 'Колво'
18   -
19   - ],
20   - ]];