Commit 1cc27986a6333a36df95b8027b73f208b3e7b08d
1 parent
021773a2
merge with server
Showing
22 changed files
with
211 additions
and
1451 deletions
Show diff stats
.gitignore
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
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 | - ]]; |