From 57f92638a3bf1dce317fcbe6233a73f96e86c55d Mon Sep 17 00:00:00 2001 From: Josh Crawford Date: Wed, 13 Dec 2017 15:00:09 +1100 Subject: [PATCH 1/6] Remove code from master - just keep changelog for backwards compatibility --- .github/ISSUE_TEMPLATE | 13 - LICENSE.md | 21 - README.md | 40 - .../FeedMe/DataTypes/AtomFeedMeDataType.php | 7 - .../FeedMe/DataTypes/BaseFeedMeDataType.php | 27 - .../FeedMe/DataTypes/JsonFeedMeDataType.php | 42 - feedme/FeedMe/DataTypes/RssFeedMeDataType.php | 7 - feedme/FeedMe/DataTypes/XmlFeedMeDataType.php | 46 - .../ElementTypes/AssetFeedMeElementType.php | 209 - .../ElementTypes/BaseFeedMeElementType.php | 91 - .../CategoryFeedMeElementType.php | 226 - .../Commerce_OrderFeedMeElementType.php | 251 -- .../Commerce_ProductFeedMeElementType.php | 433 -- .../ElementTypes/EntryFeedMeElementType.php | 348 -- .../ElementTypes/UserFeedMeElementType.php | 344 -- .../FieldTypes/AssetsFeedMeFieldType.php | 423 -- .../FeedMe/FieldTypes/BaseFeedMeFieldType.php | 92 - .../FieldTypes/CategoriesFeedMeFieldType.php | 133 - .../FieldTypes/CheckboxesFeedMeFieldType.php | 51 - .../Commerce_ProductsFeedMeFieldType.php | 76 - .../FeedMe/FieldTypes/DateFeedMeFieldType.php | 41 - .../FieldTypes/DefaultFeedMeFieldType.php | 28 - .../FieldTypes/DropdownFeedMeFieldType.php | 46 - .../FieldTypes/EntriesFeedMeFieldType.php | 158 - .../FieldTypes/LightswitchFeedMeFieldType.php | 25 - .../FieldTypes/MatrixFeedMeFieldType.php | 198 - .../FieldTypes/MultiSelectFeedMeFieldType.php | 51 - .../FieldTypes/NumberFeedMeFieldType.php | 25 - .../RadioButtonsFeedMeFieldType.php | 46 - .../FieldTypes/TableFeedMeFieldType.php | 105 - .../FeedMe/FieldTypes/TagsFeedMeFieldType.php | 121 - .../FieldTypes/UsersFeedMeFieldType.php | 139 - feedme/FeedMe/Helpers/FeedMeArrayHelper.php | 127 - feedme/FeedMe/Helpers/FeedMeDateHelper.php | 94 - feedme/FeedMe/Helpers/FeedMeDuplicate.php | 60 - feedme/FeedMe/Helpers/FeedMeHelper.php | 54 - feedme/FeedMe/License/FeedMe_License.php | 179 - feedme/FeedMePlugin.php | 182 - feedme/composer.json | 7 - feedme/composer.lock | 266 -- feedme/controllers/FeedMeController.php | 29 - feedme/controllers/FeedMe_FeedsController.php | 325 -- feedme/controllers/FeedMe_HelpController.php | 368 -- .../controllers/FeedMe_LicenseController.php | 87 - feedme/controllers/FeedMe_LogsController.php | 77 - ..._144609_feedMe_useEnumsForFeedSettings.php | 30 - .../m150425_144612_feedMe_addPasskey.php | 26 - ..._144613_feedMe_allowPrimaryElementNull.php | 15 - .../m150517_144614_feedMe_addBackupOption.php | 21 - .../m160222_000000_feedMe_addLocale.php | 12 - .../m160414_000000_feedMe_urlTextColumn.php | 12 - .../m161101_000000_feedMe_version2.php | 123 - ...129_000000_feedMe_changeImportStrategy.php | 40 - ...0_000000_feedMe_supportCustomDataTypes.php | 11 - ...516_000000_feedMe_refactorFieldMapping.php | 33 - feedme/models/FeedMe_FeedModel.php | 46 - feedme/models/FeedMe_GetHelpModel.php | 33 - feedme/models/FeedMe_LicenseModel.php | 40 - feedme/records/FeedMe_FeedRecord.php | 41 - feedme/resources/css/FeedMe.css | 496 --- feedme/resources/css/font-awesome.min.css | 1806 -------- feedme/resources/css/fonts/FontAwesome.otf | Bin 93888 -> 0 bytes .../css/fonts/fontawesome-webfont.eot | Bin 60767 -> 0 bytes .../css/fonts/fontawesome-webfont.svg | 565 --- .../css/fonts/fontawesome-webfont.ttf | Bin 122092 -> 0 bytes .../css/fonts/fontawesome-webfont.woff | Bin 71508 -> 0 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 56780 -> 0 bytes feedme/resources/icon-error.svg | 1 - feedme/resources/icon-info.svg | 227 - feedme/resources/icon-license-invalid.svg | 32 - feedme/resources/icon-license-registered.svg | 22 - feedme/resources/icon-mask.svg | 9 - feedme/resources/icon-success.svg | 1 - feedme/resources/icon.svg | 1 - feedme/resources/js/FeedMe.js | 217 - feedme/resources/js/FeedMeHelp.js | 93 - feedme/resources/js/FeedMeLicenseForm.js | 244 -- feedme/resources/js/selectize.js | 3671 ----------------- feedme/services/FeedMeService.php | 138 - feedme/services/FeedMe_DataService.php | 279 -- .../services/FeedMe_ElementTypesService.php | 43 - feedme/services/FeedMe_FeedsService.php | 138 - feedme/services/FeedMe_FieldsService.php | 113 - feedme/services/FeedMe_LicenseService.php | 190 - feedme/services/FeedMe_ProcessService.php | 485 --- feedme/tasks/FeedMeTask.php | 122 - .../_includes/elements/asset/column.html | 3 - .../_includes/elements/asset/groups.html | 11 - .../_includes/elements/asset/map.html | 105 - .../_includes/elements/category/column.html | 3 - .../_includes/elements/category/groups.html | 11 - .../_includes/elements/category/map.html | 127 - .../elements/commerce_order/column.html | 0 .../elements/commerce_order/groups.html | 0 .../elements/commerce_order/map.html | 251 -- .../elements/commerce_product/column.html | 3 - .../elements/commerce_product/groups.html | 11 - .../elements/commerce_product/map.html | 342 -- .../_includes/elements/entry/column.html | 12 - .../_includes/elements/entry/groups.html | 52 - .../_includes/elements/entry/map.html | 198 - .../_includes/elements/user/column.html | 0 .../_includes/elements/user/groups.html | 0 .../_includes/elements/user/map.html | 173 - feedme/templates/_includes/field.html | 43 - feedme/templates/_includes/fields/assets.html | 88 - .../_includes/fields/categories.html | 93 - .../_includes/fields/commerce_products.html | 86 - feedme/templates/_includes/fields/date.html | 57 - .../templates/_includes/fields/default.html | 40 - .../templates/_includes/fields/entries.html | 93 - feedme/templates/_includes/fields/matrix.html | 63 - .../_includes/fields/option-select.html | 55 - feedme/templates/_includes/fields/table.html | 42 - feedme/templates/_includes/fields/tags.html | 79 - feedme/templates/_includes/fields/users.html | 90 - feedme/templates/_layouts/index.html | 55 - feedme/templates/_layouts/settings.html | 29 - feedme/templates/_macros/index.html | 280 -- feedme/templates/feeds/_direct.html | 35 - feedme/templates/feeds/_edit.html | 210 - feedme/templates/feeds/_map.html | 68 - feedme/templates/feeds/_status.html | 46 - feedme/templates/feeds/index.html | 96 - feedme/templates/help/index.html | 146 - feedme/templates/help/response.html | 10 - feedme/templates/logs/index.html | 37 - feedme/templates/settings/general.html | 53 - feedme/templates/settings/index.html | 1 - feedme/templates/settings/license.html | 101 - feedme/templates/welcome/index.html | 21 - feedme/variables/FeedMeVariable.php | 322 -- feedme/vendor/autoload.php | 7 - .../cakephp/utility/CookieCryptTrait.php | 182 - .../vendor/cakephp/utility/Crypto/Mcrypt.php | 114 - .../vendor/cakephp/utility/Crypto/OpenSsl.php | 89 - .../utility/Exception/XmlException.php | 23 - feedme/vendor/cakephp/utility/Hash.php | 1230 ------ feedme/vendor/cakephp/utility/Inflector.php | 769 ---- feedme/vendor/cakephp/utility/LICENSE.txt | 22 - .../cakephp/utility/MergeVariablesTrait.php | 116 - feedme/vendor/cakephp/utility/README.md | 91 - feedme/vendor/cakephp/utility/Security.php | 330 -- feedme/vendor/cakephp/utility/String.php | 5 - feedme/vendor/cakephp/utility/Text.php | 1115 ----- feedme/vendor/cakephp/utility/Xml.php | 422 -- feedme/vendor/cakephp/utility/bootstrap.php | 18 - feedme/vendor/cakephp/utility/composer.json | 20 - feedme/vendor/composer/ClassLoader.php | 445 -- feedme/vendor/composer/LICENSE | 21 - feedme/vendor/composer/autoload_classmap.php | 9 - feedme/vendor/composer/autoload_files.php | 12 - .../vendor/composer/autoload_namespaces.php | 9 - feedme/vendor/composer/autoload_psr4.php | 13 - feedme/vendor/composer/autoload_real.php | 70 - feedme/vendor/composer/autoload_static.php | 55 - feedme/vendor/composer/installed.json | 260 -- .../jakeasmith/http_build_url/.gitignore | 5 - .../jakeasmith/http_build_url/.travis.yml | 13 - .../vendor/jakeasmith/http_build_url/LICENSE | 21 - .../jakeasmith/http_build_url/composer.json | 18 - .../http_build_url/phpunit.xml.dist | 21 - .../jakeasmith/http_build_url/readme.md | 20 - .../http_build_url/src/http_build_url.php | 174 - .../http_build_url/tests/HttpBuildUrlTest.php | 216 - .../http_build_url/tests/bootstrap.php | 13 - feedme/vendor/nesbot/carbon/.php_cs.dist | 57 - feedme/vendor/nesbot/carbon/LICENSE | 19 - feedme/vendor/nesbot/carbon/composer.json | 54 - feedme/vendor/nesbot/carbon/readme.md | 92 - .../nesbot/carbon/src/Carbon/Carbon.php | 3355 --------------- .../carbon/src/Carbon/CarbonInterval.php | 557 --- .../Exceptions/InvalidDateException.php | 67 - .../nesbot/carbon/src/Carbon/Lang/af.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ar.php | 31 - .../nesbot/carbon/src/Carbon/Lang/az.php | 31 - .../nesbot/carbon/src/Carbon/Lang/bg.php | 31 - .../nesbot/carbon/src/Carbon/Lang/bn.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ca.php | 31 - .../nesbot/carbon/src/Carbon/Lang/cs.php | 31 - .../nesbot/carbon/src/Carbon/Lang/da.php | 31 - .../nesbot/carbon/src/Carbon/Lang/de.php | 40 - .../nesbot/carbon/src/Carbon/Lang/el.php | 31 - .../nesbot/carbon/src/Carbon/Lang/en.php | 31 - .../nesbot/carbon/src/Carbon/Lang/eo.php | 31 - .../nesbot/carbon/src/Carbon/Lang/es.php | 31 - .../nesbot/carbon/src/Carbon/Lang/et.php | 38 - .../nesbot/carbon/src/Carbon/Lang/eu.php | 31 - .../nesbot/carbon/src/Carbon/Lang/fa.php | 31 - .../nesbot/carbon/src/Carbon/Lang/fi.php | 31 - .../nesbot/carbon/src/Carbon/Lang/fo.php | 31 - .../nesbot/carbon/src/Carbon/Lang/fr.php | 31 - .../nesbot/carbon/src/Carbon/Lang/gl.php | 24 - .../nesbot/carbon/src/Carbon/Lang/he.php | 31 - .../nesbot/carbon/src/Carbon/Lang/hr.php | 31 - .../nesbot/carbon/src/Carbon/Lang/hu.php | 52 - .../nesbot/carbon/src/Carbon/Lang/hy.php | 31 - .../nesbot/carbon/src/Carbon/Lang/id.php | 31 - .../nesbot/carbon/src/Carbon/Lang/it.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ja.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ka.php | 31 - .../nesbot/carbon/src/Carbon/Lang/km.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ko.php | 31 - .../nesbot/carbon/src/Carbon/Lang/lt.php | 38 - .../nesbot/carbon/src/Carbon/Lang/lv.php | 47 - .../nesbot/carbon/src/Carbon/Lang/mk.php | 24 - .../nesbot/carbon/src/Carbon/Lang/ms.php | 31 - .../nesbot/carbon/src/Carbon/Lang/nl.php | 31 - .../nesbot/carbon/src/Carbon/Lang/no.php | 31 - .../nesbot/carbon/src/Carbon/Lang/pl.php | 31 - .../nesbot/carbon/src/Carbon/Lang/pt.php | 31 - .../nesbot/carbon/src/Carbon/Lang/pt_BR.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ro.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ru.php | 31 - .../nesbot/carbon/src/Carbon/Lang/sk.php | 31 - .../nesbot/carbon/src/Carbon/Lang/sl.php | 38 - .../nesbot/carbon/src/Carbon/Lang/sq.php | 31 - .../nesbot/carbon/src/Carbon/Lang/sr.php | 31 - .../carbon/src/Carbon/Lang/sr_Cyrl_ME.php | 38 - .../carbon/src/Carbon/Lang/sr_Latn_ME.php | 38 - .../nesbot/carbon/src/Carbon/Lang/sr_ME.php | 38 - .../nesbot/carbon/src/Carbon/Lang/sv.php | 31 - .../nesbot/carbon/src/Carbon/Lang/th.php | 31 - .../nesbot/carbon/src/Carbon/Lang/tr.php | 31 - .../nesbot/carbon/src/Carbon/Lang/uk.php | 31 - .../nesbot/carbon/src/Carbon/Lang/ur.php | 24 - .../nesbot/carbon/src/Carbon/Lang/uz.php | 31 - .../nesbot/carbon/src/Carbon/Lang/vi.php | 31 - .../nesbot/carbon/src/Carbon/Lang/zh.php | 31 - .../nesbot/carbon/src/Carbon/Lang/zh_TW.php | 31 - .../vendor/symfony/polyfill-mbstring/LICENSE | 19 - .../symfony/polyfill-mbstring/Mbstring.php | 650 --- .../symfony/polyfill-mbstring/README.md | 13 - .../Resources/unidata/lowerCase.php | 1101 ----- .../Resources/unidata/upperCase.php | 1109 ----- .../symfony/polyfill-mbstring/bootstrap.php | 56 - .../symfony/polyfill-mbstring/composer.json | 34 - feedme/vendor/symfony/translation/.gitignore | 3 - .../vendor/symfony/translation/CHANGELOG.md | 79 - .../Catalogue/AbstractOperation.php | 172 - .../translation/Catalogue/MergeOperation.php | 55 - .../Catalogue/OperationInterface.php | 77 - .../translation/Catalogue/TargetOperation.php | 69 - .../TranslationDataCollector.php | 150 - .../translation/DataCollectorTranslator.php | 168 - .../translation/Dumper/CsvFileDumper.php | 63 - .../translation/Dumper/DumperInterface.php | 31 - .../symfony/translation/Dumper/FileDumper.php | 126 - .../translation/Dumper/IcuResFileDumper.php | 106 - .../translation/Dumper/IniFileDumper.php | 45 - .../translation/Dumper/JsonFileDumper.php | 44 - .../translation/Dumper/MoFileDumper.php | 82 - .../translation/Dumper/PhpFileDumper.php | 38 - .../translation/Dumper/PoFileDumper.php | 61 - .../translation/Dumper/QtFileDumper.php | 50 - .../translation/Dumper/XliffFileDumper.php | 184 - .../translation/Dumper/YamlFileDumper.php | 55 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidResourceException.php | 21 - .../translation/Exception/LogicException.php | 21 - .../Exception/NotFoundResourceException.php | 21 - .../Exception/RuntimeException.php | 21 - .../Extractor/AbstractFileExtractor.php | 85 - .../translation/Extractor/ChainExtractor.php | 60 - .../Extractor/ExtractorInterface.php | 38 - .../translation/IdentityTranslator.php | 65 - .../vendor/symfony/translation/Interval.php | 109 - feedme/vendor/symfony/translation/LICENSE | 19 - .../translation/Loader/ArrayLoader.php | 66 - .../translation/Loader/CsvFileLoader.php | 65 - .../symfony/translation/Loader/FileLoader.php | 65 - .../translation/Loader/IcuDatFileLoader.php | 62 - .../translation/Loader/IcuResFileLoader.php | 92 - .../translation/Loader/IniFileLoader.php | 28 - .../translation/Loader/JsonFileLoader.php | 64 - .../translation/Loader/LoaderInterface.php | 38 - .../translation/Loader/MoFileLoader.php | 154 - .../translation/Loader/PhpFileLoader.php | 28 - .../translation/Loader/PoFileLoader.php | 151 - .../translation/Loader/QtFileLoader.php | 77 - .../translation/Loader/XliffFileLoader.php | 329 -- .../translation/Loader/YamlFileLoader.php | 49 - .../dic/xliff-core/xliff-core-1.2-strict.xsd | 2223 ---------- .../schema/dic/xliff-core/xliff-core-2.0.xsd | 411 -- .../Loader/schema/dic/xliff-core/xml.xsd | 309 -- .../symfony/translation/LoggingTranslator.php | 139 - .../symfony/translation/MessageCatalogue.php | 275 -- .../translation/MessageCatalogueInterface.php | 142 - .../symfony/translation/MessageSelector.php | 88 - .../translation/MetadataAwareInterface.php | 54 - .../translation/PluralizationRules.php | 209 - feedme/vendor/symfony/translation/README.md | 13 - .../Tests/Catalogue/AbstractOperationTest.php | 74 - .../Tests/Catalogue/MergeOperationTest.php | 83 - .../Tests/Catalogue/TargetOperationTest.php | 82 - .../TranslationDataCollectorTest.php | 152 - .../Tests/DataCollectorTranslatorTest.php | 92 - .../Tests/Dumper/CsvFileDumperTest.php | 30 - .../Tests/Dumper/FileDumperTest.php | 87 - .../Tests/Dumper/IcuResFileDumperTest.php | 29 - .../Tests/Dumper/IniFileDumperTest.php | 29 - .../Tests/Dumper/JsonFileDumperTest.php | 39 - .../Tests/Dumper/MoFileDumperTest.php | 29 - .../Tests/Dumper/PhpFileDumperTest.php | 29 - .../Tests/Dumper/PoFileDumperTest.php | 29 - .../Tests/Dumper/QtFileDumperTest.php | 29 - .../Tests/Dumper/XliffFileDumperTest.php | 90 - .../Tests/Dumper/YamlFileDumperTest.php | 47 - .../Tests/IdentityTranslatorTest.php | 96 - .../translation/Tests/IntervalTest.php | 49 - .../Tests/Loader/CsvFileLoaderTest.php | 61 - .../Tests/Loader/IcuDatFileLoaderTest.php | 64 - .../Tests/Loader/IcuResFileLoaderTest.php | 51 - .../Tests/Loader/IniFileLoaderTest.php | 51 - .../Tests/Loader/JsonFileLoaderTest.php | 62 - .../Tests/Loader/LocalizedTestCase.php | 24 - .../Tests/Loader/MoFileLoaderTest.php | 72 - .../Tests/Loader/PhpFileLoaderTest.php | 50 - .../Tests/Loader/PoFileLoaderTest.php | 109 - .../Tests/Loader/QtFileLoaderTest.php | 75 - .../Tests/Loader/XliffFileLoaderTest.php | 191 - .../Tests/Loader/YamlFileLoaderTest.php | 71 - .../Tests/LoggingTranslatorTest.php | 50 - .../Tests/MessageCatalogueTest.php | 222 - .../translation/Tests/MessageSelectorTest.php | 133 - .../Tests/PluralizationRulesTest.php | 122 - .../translation/Tests/TranslatorCacheTest.php | 311 -- .../translation/Tests/TranslatorTest.php | 550 --- .../Tests/Util/ArrayConverterTest.php | 74 - .../Tests/Writer/TranslationWriterTest.php | 66 - .../Tests/fixtures/empty-translation.mo | Bin 49 -> 0 bytes .../Tests/fixtures/empty-translation.po | 3 - .../translation/Tests/fixtures/empty.csv | 0 .../translation/Tests/fixtures/empty.ini | 0 .../translation/Tests/fixtures/empty.json | 0 .../translation/Tests/fixtures/empty.mo | 0 .../translation/Tests/fixtures/empty.po | 0 .../translation/Tests/fixtures/empty.xlf | 0 .../translation/Tests/fixtures/empty.yml | 0 .../translation/Tests/fixtures/encoding.xlf | 16 - .../Tests/fixtures/escaped-id-plurals.po | 10 - .../translation/Tests/fixtures/escaped-id.po | 8 - .../Tests/fixtures/fuzzy-translations.po | 10 - .../Tests/fixtures/invalid-xml-resources.xlf | 23 - .../translation/Tests/fixtures/malformed.json | 3 - .../translation/Tests/fixtures/messages.yml | 3 - .../Tests/fixtures/messages_linear.yml | 2 - .../translation/Tests/fixtures/non-valid.xlf | 11 - .../translation/Tests/fixtures/non-valid.yml | 1 - .../translation/Tests/fixtures/plurals.mo | Bin 74 -> 0 bytes .../translation/Tests/fixtures/plurals.po | 5 - .../translation/Tests/fixtures/resname.xlf | 19 - .../resourcebundle/corrupted/resources.dat | 1 - .../Tests/fixtures/resourcebundle/dat/en.res | Bin 120 -> 0 bytes .../Tests/fixtures/resourcebundle/dat/en.txt | 3 - .../Tests/fixtures/resourcebundle/dat/fr.res | Bin 124 -> 0 bytes .../Tests/fixtures/resourcebundle/dat/fr.txt | 3 - .../resourcebundle/dat/packagelist.txt | 2 - .../fixtures/resourcebundle/dat/resources.dat | Bin 352 -> 0 bytes .../Tests/fixtures/resourcebundle/res/en.res | Bin 84 -> 0 bytes .../Tests/fixtures/resources-2.0-clean.xlf | 23 - .../Tests/fixtures/resources-2.0.xlf | 25 - .../Tests/fixtures/resources-clean.xlf | 25 - .../fixtures/resources-target-attributes.xlf | 14 - .../Tests/fixtures/resources-tool-info.xlf | 14 - .../translation/Tests/fixtures/resources.csv | 4 - .../Tests/fixtures/resources.dump.json | 1 - .../translation/Tests/fixtures/resources.ini | 1 - .../translation/Tests/fixtures/resources.json | 3 - .../translation/Tests/fixtures/resources.mo | Bin 52 -> 0 bytes .../translation/Tests/fixtures/resources.php | 5 - .../translation/Tests/fixtures/resources.po | 8 - .../translation/Tests/fixtures/resources.ts | 10 - .../translation/Tests/fixtures/resources.xlf | 23 - .../translation/Tests/fixtures/resources.yml | 1 - .../translation/Tests/fixtures/valid.csv | 4 - .../Tests/fixtures/with-attributes.xlf | 21 - .../Tests/fixtures/withdoctype.xlf | 12 - .../translation/Tests/fixtures/withnote.xlf | 22 - .../vendor/symfony/translation/Translator.php | 447 -- .../translation/TranslatorBagInterface.php | 33 - .../translation/TranslatorInterface.php | 67 - .../translation/Util/ArrayConverter.php | 99 - .../translation/Writer/TranslationWriter.php | 91 - .../vendor/symfony/translation/composer.json | 48 - .../symfony/translation/phpunit.xml.dist | 30 - 387 files changed, 45649 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE delete mode 100644 LICENSE.md delete mode 100644 README.md delete mode 100644 feedme/FeedMe/DataTypes/AtomFeedMeDataType.php delete mode 100644 feedme/FeedMe/DataTypes/BaseFeedMeDataType.php delete mode 100644 feedme/FeedMe/DataTypes/JsonFeedMeDataType.php delete mode 100644 feedme/FeedMe/DataTypes/RssFeedMeDataType.php delete mode 100644 feedme/FeedMe/DataTypes/XmlFeedMeDataType.php delete mode 100644 feedme/FeedMe/ElementTypes/AssetFeedMeElementType.php delete mode 100644 feedme/FeedMe/ElementTypes/BaseFeedMeElementType.php delete mode 100644 feedme/FeedMe/ElementTypes/CategoryFeedMeElementType.php delete mode 100644 feedme/FeedMe/ElementTypes/Commerce_OrderFeedMeElementType.php delete mode 100644 feedme/FeedMe/ElementTypes/Commerce_ProductFeedMeElementType.php delete mode 100644 feedme/FeedMe/ElementTypes/EntryFeedMeElementType.php delete mode 100644 feedme/FeedMe/ElementTypes/UserFeedMeElementType.php delete mode 100644 feedme/FeedMe/FieldTypes/AssetsFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/BaseFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/CategoriesFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/CheckboxesFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/Commerce_ProductsFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/DateFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/DefaultFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/DropdownFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/EntriesFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/LightswitchFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/MatrixFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/MultiSelectFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/NumberFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/RadioButtonsFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/TableFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/TagsFeedMeFieldType.php delete mode 100644 feedme/FeedMe/FieldTypes/UsersFeedMeFieldType.php delete mode 100644 feedme/FeedMe/Helpers/FeedMeArrayHelper.php delete mode 100644 feedme/FeedMe/Helpers/FeedMeDateHelper.php delete mode 100644 feedme/FeedMe/Helpers/FeedMeDuplicate.php delete mode 100644 feedme/FeedMe/Helpers/FeedMeHelper.php delete mode 100644 feedme/FeedMe/License/FeedMe_License.php delete mode 100644 feedme/FeedMePlugin.php delete mode 100644 feedme/composer.json delete mode 100644 feedme/composer.lock delete mode 100644 feedme/controllers/FeedMeController.php delete mode 100644 feedme/controllers/FeedMe_FeedsController.php delete mode 100644 feedme/controllers/FeedMe_HelpController.php delete mode 100644 feedme/controllers/FeedMe_LicenseController.php delete mode 100644 feedme/controllers/FeedMe_LogsController.php delete mode 100644 feedme/migrations/m150305_144609_feedMe_useEnumsForFeedSettings.php delete mode 100644 feedme/migrations/m150425_144612_feedMe_addPasskey.php delete mode 100644 feedme/migrations/m150503_144613_feedMe_allowPrimaryElementNull.php delete mode 100644 feedme/migrations/m150517_144614_feedMe_addBackupOption.php delete mode 100644 feedme/migrations/m160222_000000_feedMe_addLocale.php delete mode 100644 feedme/migrations/m160414_000000_feedMe_urlTextColumn.php delete mode 100644 feedme/migrations/m161101_000000_feedMe_version2.php delete mode 100644 feedme/migrations/m170129_000000_feedMe_changeImportStrategy.php delete mode 100644 feedme/migrations/m170330_000000_feedMe_supportCustomDataTypes.php delete mode 100644 feedme/migrations/m170516_000000_feedMe_refactorFieldMapping.php delete mode 100644 feedme/models/FeedMe_FeedModel.php delete mode 100644 feedme/models/FeedMe_GetHelpModel.php delete mode 100644 feedme/models/FeedMe_LicenseModel.php delete mode 100644 feedme/records/FeedMe_FeedRecord.php delete mode 100644 feedme/resources/css/FeedMe.css delete mode 100644 feedme/resources/css/font-awesome.min.css delete mode 100644 feedme/resources/css/fonts/FontAwesome.otf delete mode 100644 feedme/resources/css/fonts/fontawesome-webfont.eot delete mode 100644 feedme/resources/css/fonts/fontawesome-webfont.svg delete mode 100644 feedme/resources/css/fonts/fontawesome-webfont.ttf delete mode 100644 feedme/resources/css/fonts/fontawesome-webfont.woff delete mode 100644 feedme/resources/css/fonts/fontawesome-webfont.woff2 delete mode 100755 feedme/resources/icon-error.svg delete mode 100644 feedme/resources/icon-info.svg delete mode 100644 feedme/resources/icon-license-invalid.svg delete mode 100644 feedme/resources/icon-license-registered.svg delete mode 100644 feedme/resources/icon-mask.svg delete mode 100755 feedme/resources/icon-success.svg delete mode 100644 feedme/resources/icon.svg delete mode 100644 feedme/resources/js/FeedMe.js delete mode 100644 feedme/resources/js/FeedMeHelp.js delete mode 100644 feedme/resources/js/FeedMeLicenseForm.js delete mode 100644 feedme/resources/js/selectize.js delete mode 100644 feedme/services/FeedMeService.php delete mode 100644 feedme/services/FeedMe_DataService.php delete mode 100644 feedme/services/FeedMe_ElementTypesService.php delete mode 100644 feedme/services/FeedMe_FeedsService.php delete mode 100644 feedme/services/FeedMe_FieldsService.php delete mode 100644 feedme/services/FeedMe_LicenseService.php delete mode 100644 feedme/services/FeedMe_ProcessService.php delete mode 100644 feedme/tasks/FeedMeTask.php delete mode 100644 feedme/templates/_includes/elements/asset/column.html delete mode 100644 feedme/templates/_includes/elements/asset/groups.html delete mode 100644 feedme/templates/_includes/elements/asset/map.html delete mode 100644 feedme/templates/_includes/elements/category/column.html delete mode 100644 feedme/templates/_includes/elements/category/groups.html delete mode 100644 feedme/templates/_includes/elements/category/map.html delete mode 100644 feedme/templates/_includes/elements/commerce_order/column.html delete mode 100644 feedme/templates/_includes/elements/commerce_order/groups.html delete mode 100644 feedme/templates/_includes/elements/commerce_order/map.html delete mode 100644 feedme/templates/_includes/elements/commerce_product/column.html delete mode 100644 feedme/templates/_includes/elements/commerce_product/groups.html delete mode 100644 feedme/templates/_includes/elements/commerce_product/map.html delete mode 100644 feedme/templates/_includes/elements/entry/column.html delete mode 100644 feedme/templates/_includes/elements/entry/groups.html delete mode 100644 feedme/templates/_includes/elements/entry/map.html delete mode 100644 feedme/templates/_includes/elements/user/column.html delete mode 100644 feedme/templates/_includes/elements/user/groups.html delete mode 100644 feedme/templates/_includes/elements/user/map.html delete mode 100644 feedme/templates/_includes/field.html delete mode 100644 feedme/templates/_includes/fields/assets.html delete mode 100644 feedme/templates/_includes/fields/categories.html delete mode 100644 feedme/templates/_includes/fields/commerce_products.html delete mode 100644 feedme/templates/_includes/fields/date.html delete mode 100644 feedme/templates/_includes/fields/default.html delete mode 100644 feedme/templates/_includes/fields/entries.html delete mode 100644 feedme/templates/_includes/fields/matrix.html delete mode 100644 feedme/templates/_includes/fields/option-select.html delete mode 100644 feedme/templates/_includes/fields/table.html delete mode 100644 feedme/templates/_includes/fields/tags.html delete mode 100644 feedme/templates/_includes/fields/users.html delete mode 100644 feedme/templates/_layouts/index.html delete mode 100644 feedme/templates/_layouts/settings.html delete mode 100644 feedme/templates/_macros/index.html delete mode 100644 feedme/templates/feeds/_direct.html delete mode 100644 feedme/templates/feeds/_edit.html delete mode 100644 feedme/templates/feeds/_map.html delete mode 100644 feedme/templates/feeds/_status.html delete mode 100644 feedme/templates/feeds/index.html delete mode 100644 feedme/templates/help/index.html delete mode 100644 feedme/templates/help/response.html delete mode 100644 feedme/templates/logs/index.html delete mode 100755 feedme/templates/settings/general.html delete mode 100644 feedme/templates/settings/index.html delete mode 100644 feedme/templates/settings/license.html delete mode 100644 feedme/templates/welcome/index.html delete mode 100644 feedme/variables/FeedMeVariable.php delete mode 100644 feedme/vendor/autoload.php delete mode 100644 feedme/vendor/cakephp/utility/CookieCryptTrait.php delete mode 100644 feedme/vendor/cakephp/utility/Crypto/Mcrypt.php delete mode 100644 feedme/vendor/cakephp/utility/Crypto/OpenSsl.php delete mode 100644 feedme/vendor/cakephp/utility/Exception/XmlException.php delete mode 100644 feedme/vendor/cakephp/utility/Hash.php delete mode 100644 feedme/vendor/cakephp/utility/Inflector.php delete mode 100644 feedme/vendor/cakephp/utility/LICENSE.txt delete mode 100644 feedme/vendor/cakephp/utility/MergeVariablesTrait.php delete mode 100644 feedme/vendor/cakephp/utility/README.md delete mode 100644 feedme/vendor/cakephp/utility/Security.php delete mode 100644 feedme/vendor/cakephp/utility/String.php delete mode 100644 feedme/vendor/cakephp/utility/Text.php delete mode 100644 feedme/vendor/cakephp/utility/Xml.php delete mode 100644 feedme/vendor/cakephp/utility/bootstrap.php delete mode 100644 feedme/vendor/cakephp/utility/composer.json delete mode 100644 feedme/vendor/composer/ClassLoader.php delete mode 100644 feedme/vendor/composer/LICENSE delete mode 100644 feedme/vendor/composer/autoload_classmap.php delete mode 100644 feedme/vendor/composer/autoload_files.php delete mode 100644 feedme/vendor/composer/autoload_namespaces.php delete mode 100644 feedme/vendor/composer/autoload_psr4.php delete mode 100644 feedme/vendor/composer/autoload_real.php delete mode 100644 feedme/vendor/composer/autoload_static.php delete mode 100644 feedme/vendor/composer/installed.json delete mode 100644 feedme/vendor/jakeasmith/http_build_url/.gitignore delete mode 100644 feedme/vendor/jakeasmith/http_build_url/.travis.yml delete mode 100644 feedme/vendor/jakeasmith/http_build_url/LICENSE delete mode 100644 feedme/vendor/jakeasmith/http_build_url/composer.json delete mode 100644 feedme/vendor/jakeasmith/http_build_url/phpunit.xml.dist delete mode 100644 feedme/vendor/jakeasmith/http_build_url/readme.md delete mode 100644 feedme/vendor/jakeasmith/http_build_url/src/http_build_url.php delete mode 100644 feedme/vendor/jakeasmith/http_build_url/tests/HttpBuildUrlTest.php delete mode 100644 feedme/vendor/jakeasmith/http_build_url/tests/bootstrap.php delete mode 100644 feedme/vendor/nesbot/carbon/.php_cs.dist delete mode 100644 feedme/vendor/nesbot/carbon/LICENSE delete mode 100644 feedme/vendor/nesbot/carbon/composer.json delete mode 100644 feedme/vendor/nesbot/carbon/readme.md delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Carbon.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/af.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ar.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/az.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/bg.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/bn.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ca.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/cs.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/da.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/de.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/el.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/en.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/eo.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/es.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/et.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/eu.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/fa.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/fi.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/fo.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/fr.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/gl.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/he.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/hr.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/hu.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/hy.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/id.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/it.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ja.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ka.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/km.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ko.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/lt.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/lv.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/mk.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ms.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/nl.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/no.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/pl.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/pt.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/pt_BR.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ro.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ru.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sk.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sl.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sq.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sr.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_ME.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_ME.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sr_ME.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/sv.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/th.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/tr.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/uk.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/ur.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/uz.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/vi.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/zh.php delete mode 100644 feedme/vendor/nesbot/carbon/src/Carbon/Lang/zh_TW.php delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/LICENSE delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/Mbstring.php delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/README.md delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/bootstrap.php delete mode 100644 feedme/vendor/symfony/polyfill-mbstring/composer.json delete mode 100644 feedme/vendor/symfony/translation/.gitignore delete mode 100644 feedme/vendor/symfony/translation/CHANGELOG.md delete mode 100644 feedme/vendor/symfony/translation/Catalogue/AbstractOperation.php delete mode 100644 feedme/vendor/symfony/translation/Catalogue/MergeOperation.php delete mode 100644 feedme/vendor/symfony/translation/Catalogue/OperationInterface.php delete mode 100644 feedme/vendor/symfony/translation/Catalogue/TargetOperation.php delete mode 100644 feedme/vendor/symfony/translation/DataCollector/TranslationDataCollector.php delete mode 100644 feedme/vendor/symfony/translation/DataCollectorTranslator.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/CsvFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/DumperInterface.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/FileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/IcuResFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/IniFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/JsonFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/MoFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/PhpFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/PoFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/QtFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/XliffFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Dumper/YamlFileDumper.php delete mode 100644 feedme/vendor/symfony/translation/Exception/ExceptionInterface.php delete mode 100644 feedme/vendor/symfony/translation/Exception/InvalidArgumentException.php delete mode 100644 feedme/vendor/symfony/translation/Exception/InvalidResourceException.php delete mode 100644 feedme/vendor/symfony/translation/Exception/LogicException.php delete mode 100644 feedme/vendor/symfony/translation/Exception/NotFoundResourceException.php delete mode 100644 feedme/vendor/symfony/translation/Exception/RuntimeException.php delete mode 100644 feedme/vendor/symfony/translation/Extractor/AbstractFileExtractor.php delete mode 100644 feedme/vendor/symfony/translation/Extractor/ChainExtractor.php delete mode 100644 feedme/vendor/symfony/translation/Extractor/ExtractorInterface.php delete mode 100644 feedme/vendor/symfony/translation/IdentityTranslator.php delete mode 100644 feedme/vendor/symfony/translation/Interval.php delete mode 100644 feedme/vendor/symfony/translation/LICENSE delete mode 100644 feedme/vendor/symfony/translation/Loader/ArrayLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/CsvFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/FileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/IcuDatFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/IcuResFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/IniFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/JsonFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/LoaderInterface.php delete mode 100644 feedme/vendor/symfony/translation/Loader/MoFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/PhpFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/PoFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/QtFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/XliffFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/YamlFileLoader.php delete mode 100644 feedme/vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-1.2-strict.xsd delete mode 100644 feedme/vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-2.0.xsd delete mode 100644 feedme/vendor/symfony/translation/Loader/schema/dic/xliff-core/xml.xsd delete mode 100644 feedme/vendor/symfony/translation/LoggingTranslator.php delete mode 100644 feedme/vendor/symfony/translation/MessageCatalogue.php delete mode 100644 feedme/vendor/symfony/translation/MessageCatalogueInterface.php delete mode 100644 feedme/vendor/symfony/translation/MessageSelector.php delete mode 100644 feedme/vendor/symfony/translation/MetadataAwareInterface.php delete mode 100644 feedme/vendor/symfony/translation/PluralizationRules.php delete mode 100644 feedme/vendor/symfony/translation/README.md delete mode 100644 feedme/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Catalogue/MergeOperationTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Catalogue/TargetOperationTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/DataCollector/TranslationDataCollectorTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/CsvFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/FileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/IcuResFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/IniFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/JsonFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/MoFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/PhpFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/PoFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/QtFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/XliffFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Dumper/YamlFileDumperTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/IdentityTranslatorTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/IntervalTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/LocalizedTestCase.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/LoggingTranslatorTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/MessageCatalogueTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/MessageSelectorTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/PluralizationRulesTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/TranslatorCacheTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/TranslatorTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Util/ArrayConverterTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/Writer/TranslationWriterTest.php delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty-translation.mo delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty-translation.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.csv delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.ini delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.json delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.mo delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/empty.yml delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/encoding.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/escaped-id-plurals.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/escaped-id.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/fuzzy-translations.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/invalid-xml-resources.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/malformed.json delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/messages.yml delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/messages_linear.yml delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/non-valid.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/non-valid.yml delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/plurals.mo delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/plurals.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resname.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/corrupted/resources.dat delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.res delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/en.txt delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.res delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/fr.txt delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/packagelist.txt delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/dat/resources.dat delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resourcebundle/res/en.res delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources-2.0-clean.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources-2.0.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources-clean.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources-target-attributes.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources-tool-info.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.csv delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.dump.json delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.ini delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.json delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.mo delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.php delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.po delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.ts delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/resources.yml delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/valid.csv delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/with-attributes.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/withdoctype.xlf delete mode 100644 feedme/vendor/symfony/translation/Tests/fixtures/withnote.xlf delete mode 100644 feedme/vendor/symfony/translation/Translator.php delete mode 100644 feedme/vendor/symfony/translation/TranslatorBagInterface.php delete mode 100644 feedme/vendor/symfony/translation/TranslatorInterface.php delete mode 100644 feedme/vendor/symfony/translation/Util/ArrayConverter.php delete mode 100644 feedme/vendor/symfony/translation/Writer/TranslationWriter.php delete mode 100644 feedme/vendor/symfony/translation/composer.json delete mode 100644 feedme/vendor/symfony/translation/phpunit.xml.dist diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE deleted file mode 100644 index 914d2944..00000000 --- a/.github/ISSUE_TEMPLATE +++ /dev/null @@ -1,13 +0,0 @@ -### Description - - - -### Steps to reproduce - -1. -2. - -### Additional info - -- Plugin version: -- Craft version: \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 765f9714..00000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Josh Crawford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 7dc2ebef..00000000 --- a/README.md +++ /dev/null @@ -1,40 +0,0 @@ -> -> ### Feed Me has a new home with the fine folks at Verbb. Read about it in our [blog post](https://verbb.io/blog/welcome-to-verbb). -> - -# Feed Me Plugin for Craft CMS - - - -Feed Me is a Craft plugin for super-simple importing of content, either once-off or at regular intervals. With support for XML, RSS, ATOM or JSON feeds, you'll be able to import your content as Entries, Categories, Craft Commerce Products (and variants), and more. - -## Features - -- Import data from XML, RSS, ATOM or JSON feeds, local or remote. -- Import into Entries (Free), Categories, Users, and Commerce Products (Pro only). -- Feeds are saved to allow easy re-processing on-demand, or to be used in a Cron job. -- Simple field-mapping interface to match your feed data with your element fields. -- Duplication handling - control what happens when feeds are processed again. -- Uses Craft's Task service to process feeds in the background. -- Database backups before each feed processing. -- Troubleshoot feed processing issues with logs. -- Grab feed data directly from your twig templates. -- Craft 2.5+ compatible. - -## Third-party ElementTypes and FieldTypes - -Have a third-party ElementType or FieldType? You'll need to install the separate Helper plugin. See the collection of helper plugins via their official repository - https://github.com/verbb/feed-me-helpers. - -## Documentation - -Visit the [Feed Me Plugin page](https://verbb.io/craft-plugins/feed-me) for all documentation, guides, pricing and developer resources. - -## Support - -Get in touch with us via the [Feed Me Support page](https://verbb.io/craft-plugins/feed-me/support) or by [creating a Github issue](/verbb/feed-me/issues) - -

- - - - diff --git a/feedme/FeedMe/DataTypes/AtomFeedMeDataType.php b/feedme/FeedMe/DataTypes/AtomFeedMeDataType.php deleted file mode 100644 index 3e68f293..00000000 --- a/feedme/FeedMe/DataTypes/AtomFeedMeDataType.php +++ /dev/null @@ -1,7 +0,0 @@ -getDataType()); - } - - public function getDataType() - { - // The data type is the short name of the class minus the 'FeedMeDataType' suffix. - $shortName = substr(strrchr(get_class($this), '\\'), 1); - return str_replace('FeedMeDataType', '', $shortName); - } - - - // Abstract Methods - // ========================================================================= - - abstract public function getFeed($url, $primaryElement, $settings); - -} \ No newline at end of file diff --git a/feedme/FeedMe/DataTypes/JsonFeedMeDataType.php b/feedme/FeedMe/DataTypes/JsonFeedMeDataType.php deleted file mode 100644 index a3f1a352..00000000 --- a/feedme/FeedMe/DataTypes/JsonFeedMeDataType.php +++ /dev/null @@ -1,42 +0,0 @@ -name . ': ' : ''; - - if (false === ($raw_content = craft()->feedMe_data->getRawData($url))) { - FeedMePlugin::log($name . 'Unable to reach ' . $url . '. Check this is the correct URL.', LogLevel::Error, true); - - return false; - } - - // Parse the JSON string - using Yii's built-in cleanup - try { - $json_array = JsonHelper::decode($raw_content, true); - } catch (Exception $e) { - FeedMePlugin::log($name . 'Invalid JSON - ' . $e->getMessage(), LogLevel::Error, true); - - return false; - } - - // Look for and return only the items for primary element - if ($primaryElement && is_array($json_array)) { - $json_array = craft()->feedMe_data->findPrimaryElement($primaryElement, $json_array); - } - - if (!is_array($json_array)) { - FeedMePlugin::log($name . 'Invalid JSON. - ' . json_last_error_msg(), LogLevel::Error, true); - - return false; - } - - return $json_array; - } -} diff --git a/feedme/FeedMe/DataTypes/RssFeedMeDataType.php b/feedme/FeedMe/DataTypes/RssFeedMeDataType.php deleted file mode 100644 index a2bc8212..00000000 --- a/feedme/FeedMe/DataTypes/RssFeedMeDataType.php +++ /dev/null @@ -1,7 +0,0 @@ -name . ': ' : ''; - - if (false === ($raw_content = craft()->feedMe_data->getRawData($url))) { - FeedMePlugin::log($name . 'Unable to reach ' . $url . '. Check this is the correct URL.', LogLevel::Error, true); - - return false; - } - - // Parse the XML string into an array - try { - $xml_array = Xml::build($raw_content); - $xml_array = Xml::toArray($xml_array); - } catch (Exception $e) { - FeedMePlugin::log($name . 'Invalid XML - ' . $e->getMessage(), LogLevel::Error, true); - - return false; - } - - // Look for and return only the items for primary element - if ($primaryElement && is_array($xml_array)) { - $xml_array = craft()->feedMe_data->findPrimaryElement($primaryElement, $xml_array); - } - - if (!is_array($xml_array)) { - FeedMePlugin::log($name . 'Invalid XML - ' . print_r($xml_array, true), LogLevel::Error, true); - - return false; - } - - return $xml_array; - } - -} diff --git a/feedme/FeedMe/ElementTypes/AssetFeedMeElementType.php b/feedme/FeedMe/ElementTypes/AssetFeedMeElementType.php deleted file mode 100644 index bb26ada9..00000000 --- a/feedme/FeedMe/ElementTypes/AssetFeedMeElementType.php +++ /dev/null @@ -1,209 +0,0 @@ -assetSources->getAllSources(); - } - - public function setModel($settings) - { - // Set up new asset model - $element = new AssetFileModel(); - $element->sourceId = $settings['elementGroup']['Asset']; - - if ($settings['locale']) { - $element->locale = $settings['locale']; - } - - return $element; - } - - public function setCriteria($settings) - { - // Match with current data - $criteria = craft()->elements->getCriteria(ElementType::Asset); - $criteria->status = null; - $criteria->limit = null; - $criteria->localeEnabled = null; - - $criteria->sourceId = $settings['elementGroup']['Asset']; - - return $criteria; - } - - public function matchExistingElement(&$criteria, $data, $settings) - { - foreach ($settings['fieldUnique'] as $handle => $value) { - if ((int)$value === 1) { - $feedValue = Hash::get($data, $handle); - $feedValue = Hash::get($data, $handle . '.data', $feedValue); - - if ($handle == 'dateModified') { - $feedValue = FeedMeDateHelper::getDateTimeString($feedValue); - } - - if ($feedValue) { - $criteria->$handle = DbHelper::escapeParam($feedValue); - } else { - FeedMePlugin::log('Asset: no data for `' . $handle . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - } - } - - // Check to see if an element already exists - interestingly, find()[0] is faster than first() - $elements = $criteria->find(); - - if (count($elements)) { - return $elements[0]; - } - - return null; - } - - public function delete(array $elements) - { - $success = true; - - foreach ($elements as $element) { - if (!craft()->assets->deleteFiles($element)) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Something went wrong while updating elements.')); - } - - $success = false; - } - } - - return $success; - } - - public function prepForElementModel(BaseElementModel $element, array &$data, $settings) - { - $fieldData = Hash::get($data, 'filename', array()); - - // Are we uploading a new asset? If so, the element gets created so return that - if (isset($fieldData['options']['upload'])) { - $service = craft()->feedMe->getFieldTypeService('Assets'); - $rootFolder = craft()->assets->getRootFolderBySourceId($element->sourceId); - $urlData = $fieldData['data']; - - $fieldData['options']['rootFolderId'] = $rootFolder->id; - - if (isset($data['folderId'])) { - $folderId = $data['folderId']['data']; - } else { - $folderId = $rootFolder->id; - } - - $fileId = $service->fetchRemoteImage($urlData, $folderId, $fieldData['options']); - - $element = craft()->assets->getFileById($fileId); - } else { - foreach ($data as $handle => $value) { - if (is_null($value)) { - continue; - } - - if (isset($value['data']) && $value['data'] === null) { - continue; - } - - if (is_array($value)) { - $dataValue = Hash::get($value, 'data', null); - } else { - $dataValue = $value; - } - - switch ($handle) { - case 'id'; - $element->$handle = $dataValue; - break; - case 'filename'; - $element->$handle = $dataValue; - break; - case 'title': - $element->getContent()->$handle = $dataValue; - break; - default: - continue 2; - } - - // Update the original data in our feed - for clarity in debugging - $data[$handle] = $element->$handle; - } - } - - return $element; - } - - public function save(BaseElementModel &$element, array $data, $settings) - { - // Are we targeting a specific locale here? If so, we create an essentially blank element - // for the primary locale, and instead create a locale for the targeted locale - if (isset($settings['locale']) && $settings['locale']) { - // Save the default locale element empty - if (craft()->assets->storeFile($element)) { - // Now get the successfully saved (empty) element, and set content on that instead - $elementLocale = craft()->assets->getFileById($element->id, $settings['locale']); - $elementLocale->setContentFromPost($data); - - // Save the locale entry - if (craft()->assets->storeFile($elementLocale)) { - return true; - } else { - if ($elementLocale->getErrors()) { - throw new Exception(json_encode($elementLocale->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - } else { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - - return false; - } else { - return craft()->assets->storeFile($element); - } - } - - public function afterSave(BaseElementModel $element, array $data, $settings) - { - - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/ElementTypes/BaseFeedMeElementType.php b/feedme/FeedMe/ElementTypes/BaseFeedMeElementType.php deleted file mode 100644 index 9a04c584..00000000 --- a/feedme/FeedMe/ElementTypes/BaseFeedMeElementType.php +++ /dev/null @@ -1,91 +0,0 @@ - $value) { - $filteredKey = str_replace('.data', '', $key); - $objectModel[$filteredKey] = $value; - } - - return Hash::expand($objectModel); - } - - protected function parseInlineTwig($data, &$dataValue) - { - if (is_string($dataValue)) { - if (strpos($dataValue, '{') !== false) { - - // Check to make sure this is a variable, not just some '{' characters - preg_match_all('/\{\w+\}/', $dataValue, $matches); - - if (isset($matches[0][0])) { - $objectModel = $this->getObjectModel($data); - $dataValue = craft()->templates->renderObjectTemplate($dataValue, $objectModel); - } - } - } - } - - protected function prepareAuthorForElement($author) - { - if (!is_numeric($author)) { - $criteria = craft()->elements->getCriteria(ElementType::User); - $criteria->search = $author; - $authorUser = $criteria->first(); - - if ($authorUser) { - $author = $authorUser->id; - } else { - $user = craft()->users->getUserByUsernameOrEmail($author); - $author = $user ? $user->id : 1; - } - } - - return $author; - } - - - // Abstract Methods - // ========================================================================= - - abstract public function getGroups(); - - abstract public function getGroupsTemplate(); - - abstract public function getColumnTemplate(); - - abstract public function getMappingTemplate(); - - abstract public function setModel($settings); - - abstract public function setCriteria($settings); - - abstract public function matchExistingElement(&$criteria, $data, $settings); - - abstract public function delete(array $elements); - - abstract public function prepForElementModel(BaseElementModel $element, array &$data, $settings); - - abstract public function save(BaseElementModel &$element, array $data, $settings); - - abstract public function afterSave(BaseElementModel $element, array $data, $settings); - -} \ No newline at end of file diff --git a/feedme/FeedMe/ElementTypes/CategoryFeedMeElementType.php b/feedme/FeedMe/ElementTypes/CategoryFeedMeElementType.php deleted file mode 100644 index 9c25d425..00000000 --- a/feedme/FeedMe/ElementTypes/CategoryFeedMeElementType.php +++ /dev/null @@ -1,226 +0,0 @@ -categories->getEditableGroups(); - } - - public function setModel($settings) - { - // Set up new category model - $element = new CategoryModel(); - $element->groupId = $settings['elementGroup']['Category']; - - if ($settings['locale']) { - $element->locale = $settings['locale']; - } - - return $element; - } - - public function setCriteria($settings) - { - // Match with current data - $criteria = craft()->elements->getCriteria(ElementType::Category); - $criteria->status = null; - $criteria->limit = null; - $criteria->localeEnabled = null; - - $criteria->groupId = $settings['elementGroup']['Category']; - - return $criteria; - } - - public function matchExistingElement(&$criteria, $data, $settings) - { - foreach ($settings['fieldUnique'] as $handle => $value) { - if ((int)$value === 1) { - $feedValue = Hash::get($data, $handle); - $feedValue = Hash::get($data, $handle . '.data', $feedValue); - - if ($feedValue) { - $criteria->$handle = DbHelper::escapeParam($feedValue); - } else { - FeedMePlugin::log('Category: no data for `' . $handle . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - } - } - - // Check to see if an element already exists - interestingly, find()[0] is faster than first() - $elements = $criteria->find(); - - if (count($elements)) { - return $elements[0]; - } - - return null; - } - - public function delete(array $elements) - { - $success = true; - - foreach ($elements as $element) { - if (!craft()->categories->deleteCategory($element)) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Something went wrong while updating elements.')); - } - - $success = false; - } - } - - return $success; - } - - public function prepForElementModel(BaseElementModel $element, array &$data, $settings) - { - foreach ($data as $handle => $value) { - if (is_null($value)) { - continue; - } - - if (isset($value['data']) && $value['data'] === null) { - continue; - } - - if (is_array($value)) { - $dataValue = Hash::get($value, 'data', null); - } else { - $dataValue = $value; - } - - // Check for any Twig shorthand used - $this->parseInlineTwig($data, $dataValue); - - switch ($handle) { - case 'id'; - $element->$handle = $dataValue; - break; - case 'slug': - if (craft()->config->get('limitAutoSlugsToAscii')) { - $dataValue = StringHelper::asciiString($dataValue); - } - - $element->$handle = ElementHelper::createSlug($dataValue); - break; - case 'title': - $element->getContent()->$handle = $dataValue; - break; - case 'enabled': - case 'localeEnabled': - $element->$handle = FeedMeHelper::parseBoolean($dataValue); - break; - default: - continue 2; - } - - // Update the original data in our feed - for clarity in debugging - $data[$handle] = $element->$handle; - } - - return $element; - } - - public function save(BaseElementModel &$element, array $data, $settings) - { - // Are we targeting a specific locale here? If so, we create an essentially blank element - // for the primary locale, and instead create a locale for the targeted locale - if (isset($settings['locale']) && $settings['locale']) { - // Save the default locale element empty - if (craft()->categories->saveCategory($element)) { - // Now get the successfully saved (empty) element, and set content on that instead - $elementLocale = craft()->categories->getCategoryById($element->id, $settings['locale']); - $elementLocale->setContentFromPost($data); - - // Save the locale entry - if (craft()->categories->saveCategory($elementLocale)) { - return true; - } else { - if ($elementLocale->getErrors()) { - throw new Exception(json_encode($elementLocale->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - } else { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - - return false; - } else { - return craft()->categories->saveCategory($element); - } - } - - public function afterSave(BaseElementModel $element, array $data, $settings) - { - $parentCategory = null; - - if (isset($data['parent'])) { - $parentCategory = $this->_prepareParentForElement($data['parent'], $element->groupId); - } - - if ($parentCategory) { - $categoryGroup = craft()->categories->getGroupById($element->groupId); - craft()->structures->append($categoryGroup->structureId, $element, $parentCategory, 'auto'); - } - } - - - - // Private Methods - // ========================================================================= - - private function _prepareParentForElement($fieldData, $groupId) - { - $parentCategory = null; - - $data = Hash::get($fieldData, 'data'); - $attribute = Hash::get($fieldData, 'options.match', 'id'); - - if (!empty($data)) { - $criteria = craft()->elements->getCriteria(ElementType::Category); - $criteria->groupId = $groupId; - $criteria->$attribute = DbHelper::escapeParam($data); - $criteria->limit = 1; - $parentCategory = $criteria->first(); - } - - return $parentCategory; - } -} diff --git a/feedme/FeedMe/ElementTypes/Commerce_OrderFeedMeElementType.php b/feedme/FeedMe/ElementTypes/Commerce_OrderFeedMeElementType.php deleted file mode 100644 index 88a5b299..00000000 --- a/feedme/FeedMe/ElementTypes/Commerce_OrderFeedMeElementType.php +++ /dev/null @@ -1,251 +0,0 @@ -locale = $settings['locale']; - } - - return $element; - } - - public function setCriteria($settings) - { - $criteria = craft()->elements->getCriteria('Commerce_Order'); - $criteria->status = null; - $criteria->limit = null; - $criteria->localeEnabled = null; - - if ($settings['locale']) { - $criteria->locale = $settings['locale']; - } - - return $criteria; - } - - public function matchExistingElement(&$criteria, $data, $settings) - { - foreach ($settings['fieldUnique'] as $handle => $value) { - if ((int)$value === 1) { - $feedValue = Hash::get($data, $handle); - $feedValue = Hash::get($data, $handle . '.data', $feedValue); - - // Special case for order number - we might be generating it! - if ($handle == 'number') { - if (isset($settings['fieldMapping']['number-options-generate'])) { - $generate = $settings['fieldMapping']['number-options-generate']; - - if ((int)$generate === 1) { - return null; - } - } - } - - if ($handle == 'dateOrdered' || $handle == 'datePaid') { - $feedValue = FeedMeDateHelper::getDateTimeString($feedValue); - } - - if ($feedValue) { - $criteria->$handle = DbHelper::escapeParam($feedValue); - } else { - FeedMePlugin::log('Commerce Order: no data for `' . $handle . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - } - } - - // Check to see if an element already exists - interestingly, find()[0] is faster than first() - $elements = $criteria->find(); - - if (count($elements)) { - return $elements[0]; - } - - return null; - } - - public function delete(array $elements) - { - $success = true; - - foreach ($elements as $element) { - if (!craft()->commerce_orders->deleteOrder($element)) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Something went wrong while updating elements.')); - } - - $success = false; - } - } - - return $success; - } - - public function prepForElementModel(BaseElementModel $element, array &$data, $settings) - { - foreach ($data as $handle => $value) { - if (is_null($value)) { - continue; - } - - if (isset($value['data']) && $value['data'] === null) { - continue; - } - - if (is_array($value)) { - $dataValue = Hash::get($value, 'data', null); - } else { - $dataValue = $value; - } - - // Check for any Twig shorthand used - $this->parseInlineTwig($data, $dataValue); - - switch ($handle) { - case 'id'; - case 'number'; - case 'email'; - case 'couponCode'; - case 'lastIp'; - case 'orderStatusId'; - case 'shippingMethod'; - case 'paymentMethodId'; - case 'customerId'; - case 'itemTotal'; - case 'baseDiscount'; - case 'baseShippingCost'; - case 'baseTax'; - case 'totalPrice'; - case 'totalPaid'; - case 'currency'; - case 'paymentCurrency'; - case 'billingAddressId'; - case 'shippingAddressId'; - $element->$handle = $dataValue; - break; - case 'dateOrdered': - case 'datePaid'; - $dateValue = FeedMeDateHelper::parseString($dataValue); - - // Ensure there's a parsed data - null will auto-generate a new date - if ($dateValue) { - $element->$handle = $dateValue; - } - - break; - case 'isCompleted': - $element->$handle = FeedMeHelper::parseBoolean($dataValue); - break; - default: - continue 2; - } - - // Update the original data in our feed - for clarity in debugging - $data[$handle] = $element->$handle; - } - - // Special check for number attribute - check if we need to generate one - if (isset($settings['fieldMapping']['number-options-generate'])) { - $generate = $settings['fieldMapping']['number-options-generate']; - - if ((int)$generate === 1) { - $element->number = $this->_generateCartNumber(); - } - } - - return $element; - } - - public function save(BaseElementModel &$element, array $data, $settings) - { - // Are we targeting a specific locale here? If so, we create an essentially blank element - // for the primary locale, and instead create a locale for the targeted locale - if (isset($settings['locale']) && $settings['locale']) { - // Save the default locale element empty - if (craft()->commerce_orders->saveOrder($element)) { - // Now get the successfully saved (empty) element, and set content on that instead - $elementLocale = craft()->commerce_orders->getOrderById($element->id); - $elementLocale->setContentFromPost($data); - - // Save the locale entry - if (craft()->commerce_orders->saveOrder($elementLocale)) { - return true; - } else { - if ($elementLocale->getErrors()) { - throw new Exception(json_encode($elementLocale->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - } else { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - - return false; - } else { - return craft()->commerce_orders->saveOrder($element); - } - } - - public function afterSave(BaseElementModel $element, array $data, $settings) - { - - } - - - // Private Methods - // ========================================================================= - - private function _generateCartNumber() - { - $number = md5(uniqid(mt_rand(), true)); - - if (craft()->commerce_orders->getOrderByNumber($number)) { - return $this->_generateCartNumber(); - } - - return $number; - } - - -} diff --git a/feedme/FeedMe/ElementTypes/Commerce_ProductFeedMeElementType.php b/feedme/FeedMe/ElementTypes/Commerce_ProductFeedMeElementType.php deleted file mode 100644 index 090c7000..00000000 --- a/feedme/FeedMe/ElementTypes/Commerce_ProductFeedMeElementType.php +++ /dev/null @@ -1,433 +0,0 @@ -commerce_productTypes->getEditableProductTypes(); - } - - public function setModel($settings) - { - $element = new Commerce_ProductModel(); - $element->typeId = $settings['elementGroup']['Commerce_Product']; - - if ($settings['locale']) { - $element->locale = $settings['locale']; - } - - return $element; - } - - public function setCriteria($settings) - { - $criteria = craft()->elements->getCriteria('Commerce_Product'); - $criteria->status = null; - $criteria->limit = null; - $criteria->localeEnabled = null; - - $criteria->typeId = $settings['elementGroup']['Commerce_Product']; - - if ($settings['locale']) { - $criteria->locale = $settings['locale']; - } - - return $criteria; - } - - public function matchExistingElement(&$criteria, $data, $settings) - { - foreach ($settings['fieldUnique'] as $handle => $value) { - if (intval($value) == 1 && ($data != '__')) { - if (strstr($handle, 'variants--')) { - $attribute = str_replace('variants--', '', $handle); - - // If we're matching existing elements via a Variant property, we don't want to use the - // Commerce_Product element criteria - $variantCriteria = craft()->elements->getCriteria('Commerce_Variant'); - $variantCriteria->status = null; - $variantCriteria->limit = null; - $variantCriteria->localeEnabled = null; - - // Because a single product can have multiple attached variants - therefore multiple data, - // we only really need the first variant value to find the parent product ID. - $feedValue = Hash::get($data, 'variants.data.0.' . $attribute); - $feedValue = Hash::get($data, 'variants.data.0.' . $attribute . '.data', $feedValue); - - // Check for single-variant - if (!$feedValue) { - $feedValue = Hash::get($data, 'variants.data.' . $attribute); - $feedValue = Hash::get($data, 'variants.data.' . $attribute . '.data', $feedValue); - } - - if (!$feedValue) { - FeedMePlugin::log('Commerce Variants: no data for `' . $attribute . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - - $variantCriteria->$attribute = DbHelper::escapeParam($feedValue); - - // Get the variants - interestingly, find()[0] is faster than first() - $variants = $variantCriteria->find(); - - // Set the Product ID for the criteria from our found variant - thats what we need to update - if (count($variants)) { - $criteria->id = $variants[0]->productId; - } else { - return null; - } - } else { - $feedValue = Hash::get($data, $handle); - $feedValue = Hash::get($data, $handle . '.data', $feedValue); - - if ($handle == 'postDate' || $handle == 'expiryDate') { - $feedValue = FeedMeDateHelper::getDateTimeString($feedValue); - } - - if ($feedValue) { - $criteria->$handle = DbHelper::escapeParam($feedValue); - } else { - FeedMePlugin::log('Commerce Products: no data for `' . $handle . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - } - } - } - - // Check to see if an element already exists - interestingly, find()[0] is faster than first() - $elements = $criteria->find(); - - if (count($elements)) { - return $elements[0]; - } - - return null; - } - - public function delete(array $elements) - { - $success = true; - - foreach ($elements as $element) { - if (!craft()->commerce_products->deleteProduct($element)) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Something went wrong while updating elements.')); - } - - $success = false; - } - } - - return $success; - } - - public function prepForElementModel(BaseElementModel $element, array &$data, $settings) - { - foreach ($data as $handle => $value) { - if (is_null($value)) { - continue; - } - - if (isset($value['data']) && $value['data'] === null) { - continue; - } - - if (is_array($value)) { - $dataValue = Hash::get($value, 'data', null); - } else { - $dataValue = $value; - } - - // Check for any Twig shorthand used - $this->parseInlineTwig($data, $dataValue); - - switch ($handle) { - case 'id'; - case 'taxCategoryId'; - // Support getting category by ID, Name or Handle - $taxCategory = $this->_getTaxCategory($dataValue); - - if ($taxCategory) { - $element->$handle = $taxCategory->id; - } - - break; - case 'shippingCategoryId'; - // Support getting category by ID, Name or Handle - $shippingCategory = $this->_getShippingCategory($dataValue); - - if ($shippingCategory) { - $element->$handle = $shippingCategory->id; - } - - break; - case 'slug'; - if (craft()->config->get('limitAutoSlugsToAscii')) { - $dataValue = StringHelper::asciiString($dataValue); - } - - $element->$handle = ElementHelper::createSlug($dataValue); - break; - case 'postDate': - case 'expiryDate'; - $dateValue = FeedMeDateHelper::parseString($dataValue); - - // Ensure there's a parsed data - null will auto-generate a new date - if ($dateValue) { - $element->$handle = $dateValue; - } - - break; - case 'enabled': - case 'freeShipping': - case 'promotable': - $element->$handle = FeedMeHelper::parseBoolean($dataValue); - break; - case 'title': - $element->getContent()->$handle = $dataValue; - break; - default: - continue 2; - } - - // Update the original data in our feed - for clarity in debugging - $data[$handle] = $element->$handle; - } - - $this->_populateProductVariantModels($element, $data, $settings); - - return $element; - } - - public function save(BaseElementModel &$element, array $data, $settings) - { - // Are we targeting a specific locale here? If so, we create an essentially blank element - // for the primary locale, and instead create a locale for the targeted locale - if (isset($settings['locale']) && $settings['locale']) { - // Save the default locale element empty - $result = craft()->commerce_products->saveProduct($element); - - if ($result) { - // Now get the successfully saved (empty) element, and set content on that instead - $elementLocale = craft()->commerce_products->getProductById($element->id, $settings['locale']); - $elementLocale->setContentFromPost($data); - - // Save the locale entry - $result = craft()->commerce_products->saveProduct($elementLocale); - } - } else { - $result = craft()->commerce_products->saveProduct($element); - } - - // Because we can have product and variant error, make sure we show them - if (!$result) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - foreach ($element->getVariants() as $variant) { - if ($variant->getErrors()) { - throw new Exception(json_encode($variant->getErrors())); - } - } - } - } - - return $result; - } - - public function afterSave(BaseElementModel $element, array $data, $settings) - { - - } - - - // Private Methods - // ========================================================================= - - private function _populateProductModel(Commerce_ProductModel &$product, $data) - { - - } - - private function _populateProductVariantModels(Commerce_ProductModel $product, &$data, $settings) - { - $orphanedValues = []; - $variants = []; - $count = 1; - - $variantData = Hash::get($data, 'variants.data'); - - if (!$variantData) { - return false; - } - - // Ensure we handle single-variants correctly - $keys = array_keys($variantData); - - foreach ($keys as $index => $key) { - if (!is_numeric($key)) { - // Save for later - $orphanedValues[$key] = $variantData[$key]; - - // Remove from original data - unset($variantData[$key]); - } - } - - // If we've actually just got a single variant, we've messed with things above, so put all attributes - // back to their first variant. This should also move in the defaults as well. - if (empty($variantData)) { - $variantData = array($orphanedValues); - } - - // Update original data - $data['variants'] = $variantData; - - foreach ($variantData as $key => $variant) { - // Check each to add our orphaned data in (if any), which is usually dropped in through - // defaults - this is pretty nasty, and will be much better in future Feed Me versions - $variant = array_merge($variant, $orphanedValues); - - $variantModel = $this->_getVariantBySku($variant['sku']['data']); - - if (!$variantModel) { - $variantModel = new Commerce_VariantModel(); - } - - $variantModel->setProduct($product); - - // Check for our default data (if any provided, and if not already set in 'real' data) - foreach ($settings['fieldDefaults'] as $defaultsHandle => $defaultsValue) { - if ($defaultsValue) { - $variantPreppedHandle = str_replace('variants--', '', $defaultsHandle); - - $variant[$variantPreppedHandle]['data'] = $defaultsValue; - } - } - - $variantModel->enabled = Hash::get($variant, 'enabled.data', 1); - $variantModel->isDefault = Hash::get($variant, 'isDefault.data', 0); - $variantModel->sku = Hash::get($variant, 'sku.data', $variantModel->sku); - $variantModel->price = Hash::get($variant, 'price.data', $variantModel->price); - $variantModel->width = LocalizationHelper::normalizeNumber(Hash::get($variant, 'width.data', $variantModel->width)); - $variantModel->height = LocalizationHelper::normalizeNumber(Hash::get($variant, 'height.data', $variantModel->height)); - $variantModel->length = LocalizationHelper::normalizeNumber(Hash::get($variant, 'length.data', $variantModel->length)); - $variantModel->weight = LocalizationHelper::normalizeNumber(Hash::get($variant, 'weight.data', $variantModel->weight)); - $variantModel->stock = LocalizationHelper::normalizeNumber(Hash::get($variant, 'stock.data', $variantModel->stock)); - $variantModel->unlimitedStock = LocalizationHelper::normalizeNumber(Hash::get($variant, 'unlimitedStock.data', $variantModel->unlimitedStock)); - $variantModel->minQty = LocalizationHelper::normalizeNumber(Hash::get($variant, 'minQty.data', $variantModel->minQty)); - $variantModel->maxQty = LocalizationHelper::normalizeNumber(Hash::get($variant, 'maxQty.data', $variantModel->maxQty)); - - $variantModel->sortOrder = $count++; - - // Loop through each field for this Variant model - see if we have data - $variantContent = array(); - foreach ($variantModel->getFieldLayout()->getFields() as $fieldLayout) { - $field = $fieldLayout->getField(); - $handle = $field->handle; - - $fieldData = Hash::get($variant, $handle); - - if ($fieldData) { - // Parse this inner-field's data, just like a regular field - $parsedData = craft()->feedMe_fields->prepForFieldType($variantModel, $fieldData, $handle); - - // Fire any post-processing for the field type - $posted = craft()->feedMe_fields->postForFieldType($variantModel, $parsedData, $handle, $field); - - if ($posted) { - $parsedData = $parsedData[$handle]; - } - - if ($parsedData) { - $variantContent[$handle] = $parsedData; - } - } - } - - $variantModel->setContentFromPost($variantContent); - - $variantModel->getContent()->title = Hash::get($variant, 'title.data', $variantModel->getContent()->title); - - $variants[] = $variantModel; - } - - $product->setVariants($variants); - } - - private function _getVariantBySku($sku, $localeId = null) - { - return craft()->elements->getCriteria('Commerce_Variant', array('sku' => $sku, 'status' => null, 'locale' => $localeId))->first(); - } - - private function _getTaxCategory($value) - { - // Find by ID - $result = Commerce_TaxCategoryRecord::model()->findById($value); - - // Find by Name - if (!$result) { - $result = Commerce_TaxCategoryRecord::model()->findByAttributes(array('name' => $value)); - } - - // Find by Handle - if (!$result) { - $result = Commerce_TaxCategoryRecord::model()->findByAttributes(array('handle' => $value)); - } - - if ($result) { - return Commerce_TaxCategoryModel::populateModel($result); - } - - return false; - } - - private function _getShippingCategory($value) - { - // Find by ID - $result = Commerce_ShippingCategoryRecord::model()->findById($value); - - // Find by Name - if (!$result) { - $result = Commerce_ShippingCategoryRecord::model()->findByAttributes(array('name' => $value)); - } - - // Find by Handle - if (!$result) { - $result = Commerce_ShippingCategoryRecord::model()->findByAttributes(array('handle' => $value)); - } - - if ($result) { - return Commerce_ShippingCategoryModel::populateModel($result); - } - - return false; - } -} diff --git a/feedme/FeedMe/ElementTypes/EntryFeedMeElementType.php b/feedme/FeedMe/ElementTypes/EntryFeedMeElementType.php deleted file mode 100644 index 6e9aaa04..00000000 --- a/feedme/FeedMe/ElementTypes/EntryFeedMeElementType.php +++ /dev/null @@ -1,348 +0,0 @@ -sections->getEditableSections(); - - // Get sections but not singles - $sections = array(); - foreach ($editable as $section) { - if ($section->type != SectionType::Single) { - $sections[] = $section; - } - } - - return $sections; - } - - public function setModel($settings) - { - $element = new EntryModel(); - $element->sectionId = $settings['elementGroup']['Entry']['section']; - $element->typeId = $settings['elementGroup']['Entry']['entryType']; - - $section = craft()->sections->getSectionById($element->sectionId); - $locale = craft()->i18n->getPrimarySiteLocale(); - - if ($settings['locale']) { - $element->locale = $settings['locale']; - - if (isset($section->locales[$locale->id])) { - $element->localeEnabled = $section->locales[$locale->id]->enabledByDefault; - } - } - - // While we're at it - save a list of required fields for later. We only want to do this once - // per import, and its vital when importing into specific locales - $entryType = craft()->sections->getEntryTypeById($element->typeId); - - $this->_requiredFields = craft()->db->createCommand() - ->select('f.id, f.handle') - ->from('fieldlayoutfields flf') - ->join('fields f', 'flf.fieldId = f.id') - ->where('flf.layoutId = :layoutId', array(':layoutId' => $entryType->fieldLayoutId)) - ->andWhere('flf.required = 1') - ->queryAll(); - - return $element; - } - - public function setCriteria($settings) - { - $criteria = craft()->elements->getCriteria(ElementType::Entry); - $criteria->status = null; - $criteria->limit = null; - $criteria->localeEnabled = null; - - $criteria->sectionId = $settings['elementGroup']['Entry']['section']; - $criteria->type = $settings['elementGroup']['Entry']['entryType']; - - if ($settings['locale']) { - $criteria->locale = $settings['locale']; - } - - return $criteria; - } - - public function matchExistingElement(&$criteria, $data, $settings) - { - foreach ($settings['fieldUnique'] as $handle => $value) { - if ((int)$value === 1) { - $feedValue = Hash::get($data, $handle); - $feedValue = Hash::get($data, $handle . '.data', $feedValue); - - // Special-case for Title which can be dynamic - if ($handle == 'title') { - $entryTypeId = $settings['elementGroup']['Entry']['entryType']; - $entryType = craft()->sections->getEntryTypeById($entryTypeId); - - // Its dynamically generated - if (!$entryType->hasTitleField) { - $feedValue = craft()->templates->renderObjectTemplate($entryType->titleFormat, $data); - } - } - - if ($handle == 'postDate' || $handle == 'expiryDate') { - $feedValue = FeedMeDateHelper::getDateTimeString($feedValue); - } - - if ($feedValue) { - $criteria->$handle = DbHelper::escapeParam($feedValue); - } else { - FeedMePlugin::log('Entry: no data for `' . $handle . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - } - } - - // Check to see if an element already exists - interestingly, find()[0] is faster than first() - $elements = $criteria->find(); - - if (count($elements)) { - return $elements[0]; - } - - return null; - } - - public function delete(array $elements) - { - $success = true; - - foreach ($elements as $element) { - if (!craft()->entries->deleteEntry($element)) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Something went wrong while updating elements.')); - } - - $success = false; - } - } - - return $success; - } - - public function disable(array $elements) - { - // Mark all as false - $elementIds = array(); - - foreach ($elements as $element) { - $elementIds[] = $element->id; - } - - return craft()->db->createCommand()->update('elements', array('enabled' => 0), array('in', 'id', $elementIds)); - } - - public function prepForElementModel(BaseElementModel $element, array &$data, $settings) - { - $checkAncestors = !isset($data['parentId']); - - foreach ($data as $handle => $value) { - if (is_null($value)) { - continue; - } - - if (isset($value['data']) && $value['data'] === null) { - continue; - } - - if (is_array($value)) { - $dataValue = Hash::get($value, 'data', null); - } else { - $dataValue = $value; - } - - // Check for any Twig shorthand used - $this->parseInlineTwig($data, $dataValue); - - switch ($handle) { - case 'id'; - $element->$handle = $dataValue; - break; - case 'authorId'; - $element->$handle = $this->prepareAuthorForElement($dataValue); - break; - case 'slug'; - if (craft()->config->get('limitAutoSlugsToAscii')) { - $dataValue = StringHelper::asciiString($dataValue); - } - - $element->$handle = ElementHelper::createSlug($dataValue); - break; - case 'postDate': - case 'expiryDate'; - $dateValue = FeedMeDateHelper::parseString($dataValue); - - // Ensure there's a parsed data - null will auto-generate a new date - if ($dateValue) { - $element->$handle = $dateValue; - } - - break; - case 'enabled': - case 'localeEnabled': - $element->$handle = FeedMeHelper::parseBoolean($dataValue); - break; - case 'title': - $element->getContent()->$handle = $dataValue; - break; - case 'parent': - $element->parentId = $this->_prepareParentForElement($value, $element->sectionId); - break; - default: - continue 2; - } - - // Update the original data in our feed - for clarity in debugging - $data[$handle] = $element->$handle; - } - - // Set default author if not set - if (!$element->authorId) { - $user = craft()->userSession->getUser(); - $element->authorId = ($element->authorId ? $element->authorId : ($user ? $user->id : 1)); - - // Update the original data in our feed - for clarity in debugging - $data['authorId'] = $element->authorId; - } - - return $element; - } - - public function save(BaseElementModel &$element, array $data, $settings) - { - // Are we targeting a specific locale here? If so, we create an essentially blank element - // for the primary locale, and instead create a locale for the targeted locale - if (isset($settings['locale']) && $settings['locale']) { - // While we want to create a blank primary locale, we need to check for required fields.. - $this->_populateRequiredFields($element, $data); - - // Save the default locale element empty - if (craft()->entries->saveEntry($element)) { - // Now get the successfully saved (empty) element, and set content on that instead - $elementLocale = craft()->entries->getEntryById($element->id, $settings['locale']); - $elementLocale->setContentFromPost($data); - - // Save the locale entry - if (craft()->entries->saveEntry($elementLocale)) { - return true; - } else { - if ($elementLocale->getErrors()) { - throw new Exception(json_encode($elementLocale->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - } else { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Unknown Element error occurred.')); - } - } - - return false; - } else { - return craft()->entries->saveEntry($element); - } - } - - public function afterSave(BaseElementModel $element, array $data, $settings) - { - - } - - - // Private Methods - // ========================================================================= - - private function _populateRequiredFields($element, $feedData) - { - $requiredContent = array(); - - // This is called when importing into a specific locale. We first save the primary element - but, we need to - // populate any required fields for the original locale, otherwise it'll fail to save at all... - foreach ($this->_requiredFields as $row) { - $handle = $row['handle']; - - $data = Hash::get($feedData, $handle); - - // Check if this element already has content for this field - no need to add otherwise - $existingData = $element->getFieldValue($handle); - - // Some special cases for element fields - if ($existingData instanceof ElementCriteriaModel) { - $existingData = $existingData->ids(); - } - - // If there's existing data, don't overwrite from our feed, priority is existing content - if (is_null($existingData) || count($existingData) == 0) { - $requiredContent[$handle] = $data; - } else { - $requiredContent[$handle] = $existingData; - } - } - - if (count($requiredContent)) { - $element->setContentFromPost($requiredContent); - } - } - - private function _prepareParentForElement($fieldData, $sectionId) - { - $parentId = null; - - $data = Hash::get($fieldData, 'data'); - $attribute = Hash::get($fieldData, 'options.match', 'id'); - - if (!empty($data)) { - $criteria = craft()->elements->getCriteria(ElementType::Entry); - $criteria->sectionId = $sectionId; - $criteria->$attribute = DbHelper::escapeParam($data); - $criteria->limit = 1; - - if ($criteria->total()) { - $parentId = $criteria->ids()[0]; - } - } - - return $parentId; - } -} \ No newline at end of file diff --git a/feedme/FeedMe/ElementTypes/UserFeedMeElementType.php b/feedme/FeedMe/ElementTypes/UserFeedMeElementType.php deleted file mode 100644 index 9e910cc8..00000000 --- a/feedme/FeedMe/ElementTypes/UserFeedMeElementType.php +++ /dev/null @@ -1,344 +0,0 @@ -getEdition() == Craft::Pro) { - $groups = craft()->userGroups->getAllGroups(); - - $result = count($groups) ? $groups : true; - } - - return $result; - } - - public function setModel($settings) - { - $element = new UserModel(); - - if ($settings['locale']) { - $element->locale = $settings['locale']; - } - - return $element; - } - - public function setCriteria($settings) - { - $criteria = craft()->elements->getCriteria(ElementType::User); - $criteria->status = null; - $criteria->limit = null; - //$criteria->group = null; - $criteria->localeEnabled = null; - - if ($settings['locale']) { - $criteria->locale = $settings['locale']; - } - - return $criteria; - } - - public function matchExistingElement(&$criteria, $data, $settings) - { - foreach ($settings['fieldUnique'] as $handle => $value) { - if ((int)$value === 1) { - $feedValue = Hash::get($data, $handle); - $feedValue = Hash::get($data, $handle . '.data', $feedValue); - - if ($feedValue) { - $criteria->$handle = DbHelper::escapeParam($feedValue); - } else { - FeedMePlugin::log('User: no data for `' . $handle . '` to match an existing element on. Is data present for this in your feed?', LogLevel::Error, true); - return false; - } - } - } - - // Check to see if an element already exists - interestingly, find()[0] is faster than first() - $elements = $criteria->find(); - - if (count($elements)) { - return $elements[0]; - } - - return null; - } - - public function delete(array $elements) - { - $success = true; - - foreach ($elements as $element) { - if (!craft()->users->deleteUser($element)) { - if ($element->getErrors()) { - throw new Exception(json_encode($element->getErrors())); - } else { - throw new Exception(Craft::t('Something went wrong while updating elements.')); - } - - $success = false; - } - } - - return $success; - } - - public function prepForElementModel(BaseElementModel $element, array &$data, $settings) - { - foreach ($data as $handle => $value) { - if (is_null($value)) { - continue; - } - - if (isset($value['data']) && $value['data'] === null) { - continue; - } - - if (is_array($value)) { - $dataValue = Hash::get($value, 'data', null); - } else { - $dataValue = $value; - } - - // Check for any Twig shorthand used - $this->parseInlineTwig($data, $dataValue); - - switch ($handle) { - case 'id': - case 'username': - case 'firstName': - case 'lastName': - case 'email': - case 'preferredLocale': - case 'newPassword': - $element->$handle = $dataValue; - break; - case 'groups': - $this->_handleUserGroups($element, $dataValue); - break; - case 'photo': - $this->_handleUserPhoto($element, $dataValue); - break; - case 'status': - $this->_setUserStatus($element, $dataValue); - break; - default: - continue 2; - } - - // Update the original data in our feed - for clarity in debugging - $data[$handle] = $element->$handle; - } - - // Set email as username - if (craft()->config->get('useEmailAsUsername')) { - $element->username = $element->email; - } - - return $element; - } - - public function save(BaseElementModel &$element, array $data, $settings) - { - // Because our main processing function checks for locale-only content, the content field won't be - // prepped with data. However - user profile fields aren't multi-locale, and often validation will fail. - // So pretty much ignore local-targeting (because there's only one), and put back the content - $element->setContentFromPost($data); - - if (craft()->users->saveUser($element)) { - // Set user groups, but careful to check if we're actually mapping or using existing ones - if ($element->groups) { - if (is_numeric($element->groups[0])) { - craft()->userGroups->assignUserToGroups($element->id, $element->groups); - } - } - - return true; - } - - return false; - } - - public function afterSave(BaseElementModel $element, array $data, $settings) - { - - } - - - // Private Methods - // ========================================================================= - - private function _handleUserGroups(UserModel $user, $dataValue) - { - $groups = array(); - - // Get any existing groups for this user - if ($user->groups) { - foreach ($user->groups as $group) { - if (is_numeric($group)) { - $groups[] = $group; - } else { - $groups[] = $group->id; - } - } - } - - if (!is_array($dataValue)) { - $dataValue = array($dataValue); - } - - foreach ($dataValue as $value) { - if (!is_numeric($value)) { - $result = UserGroupRecord::model()->findByAttributes(array('name' => $value)); - - if (!$result) { - $result = UserGroupRecord::model()->findByAttributes(array('handle' => $value)); - } - - if (!$result) { - continue; - } - - $group = UserGroupModel::populateModel($result); - $value = $group->id; - } - - if (!in_array($value, $groups)) { - $groups[] = $value; - } - } - - $user->groups = $groups; - - return $user; - } - - private function _handleUserPhoto(UserModel $user, $dataValue) - { - $photoPath = craft()->path->getUserPhotosPath(); - - // Support for remote-download of image for profile - if (UrlHelper::isAbsoluteUrl($dataValue)) { - $filename = basename($dataValue); - - $tempPath = craft()->path->getTempPath(); - - // Check if the temp path exists first - if (!IOHelper::getRealPath($tempPath)) { - IOHelper::createFolder($tempPath, craft()->config->get('defaultFolderPermissions'), true); - - if (!IOHelper::getRealPath($tempPath)) { - throw new Exception(Craft::t('Temp folder “{tempPath}” does not exist and could not be created', array('tempPath' => $tempPath))); - } - } - - $photo = $tempPath . $filename; - - $defaultOptions = array( - CURLOPT_FILE => fopen($photo, 'w'), - CURLOPT_FOLLOWLOCATION => true, - CURLOPT_URL => $dataValue, - CURLOPT_FAILONERROR => true, - ); - - $configOptions = craft()->config->get('curlOptions', 'feedMe'); - - if ($configOptions) { - $opts = $configOptions + $defaultOptions; - } else { - $opts = $defaultOptions; - } - - $ch = curl_init(); - curl_setopt_array($ch, $opts); - $result = curl_exec($ch); - - if (!$result) { - return false; - } - } else { - $filename = $dataValue; - $photo = $photoPath . $dataValue; - - if (!IOHelper::fileExists($photo)) { - return false; - } - } - - $image = craft()->images->loadImage($photo); - $imageWidth = $image->getWidth(); - $imageHeight = $image->getHeight(); - - $dimension = min($imageWidth, $imageHeight); - $horizontalMargin = ($imageWidth - $dimension) / 2; - $verticalMargin = ($imageHeight - $dimension) / 2; - $image->crop($horizontalMargin, $imageWidth - $horizontalMargin, $verticalMargin, $imageHeight - $verticalMargin); - - craft()->users->saveUserPhoto($filename, $image, $user); - - // Cleanup any leftover temp image from remote upload - if (UrlHelper::isAbsoluteUrl($dataValue)) { - IOHelper::deleteFile($photo, true); - } - } - - private function _setUserStatus(UserModel $user, $status) - { - switch ($status) { - case 'locked'; - $user->locked = true; - break; - case 'suspended'; - $user->locked = false; - $user->suspended = true; - break; - case 'archived': - $user->locked = false; - $user->suspended = false; - $user->archived = true; - break; - case 'pending': - $user->locked = false; - $user->suspended = false; - $user->archived = false; - $user->pending = true; - break; - case 'active': - $user->suspended = false; - $user->locked = false; - $user->setActive(); - break; - } - - return $user; - } -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/AssetsFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/AssetsFeedMeFieldType.php deleted file mode 100644 index 5bd4da73..00000000 --- a/feedme/FeedMe/FieldTypes/AssetsFeedMeFieldType.php +++ /dev/null @@ -1,423 +0,0 @@ -_uploadData[$field->handle] = array(); - - $data = Hash::get($fieldData, 'data'); - - if (empty($data)) { - return array(); - } - - if (!is_array($data)) { - $data = array($data); - } - - $settings = $field->getFieldType()->getSettings(); - - // Get folder id's for connecting - $folderIds = array(); - $folders = $settings->getAttribute('sources'); - if (is_array($folders)) { - foreach ($folders as $folder) { - list(, $id) = explode(':', $folder); - $folderIds[] = $id; - - // Get all sub-folders for this root folder - $folderModel = craft()->assets->getFolderById($id); - - if ($folderModel) { - $subFolders = craft()->assets->getAllDescendantFolders($folderModel); - - if (is_array($subFolders)) { - foreach ($subFolders as $subFolder) { - $folderIds[] = $subFolder->id; - } - } - } - } - } - - // Find existing asset - foreach ($data as $asset) { - // Clean the URL - $asset = UrlHelper::stripQueryString($asset); - - // Cleanup filenames to match Craft Assets - //$asset = AssetsHelper::cleanAssetName($asset); - $asset = str_replace(',', '\,', $asset); - - $criteria = craft()->elements->getCriteria(ElementType::Asset); - $criteria->status = null; - $criteria->folderId = $folderIds; - $criteria->limit = $settings->limit; - $criteria->filename = $asset; - - $preppedData = array_merge($preppedData, $criteria->ids()); - } - - // Check to see if we should be uploading these assets - but save for later, to be - // processed in `postFieldData`, once our owner element have been populated - if (isset($fieldData['options']['upload'])) { - $this->_uploadData[$field->handle] = $fieldData; - } - - // Check for field limit - only return the specified amount - if ($preppedData) { - if ($field->settings['limit']) { - $preppedData = array_chunk($preppedData, $field->settings['limit']); - $preppedData = $preppedData[0]; - } - } - - // Check if we've got any data for the fields in this element - if (isset($fieldData['fields'])) { - $this->_populateElementFields($preppedData, $fieldData['fields']); - } - - return $preppedData; - } - - - // Check if we want to upload our asset. This is done after the above 'regular' parsing so we - // have a chance to setup our owner element with attributes - particularly useful for folder locations - // that use the element owners attributes, which are now set. - public function postFieldData($element, $field, &$fieldData, $handle) - { - // Check for our saved data from the main parsing function above. We've already destroyed the - // initial feed data with 'real' information, but in this case, we still need it! - $uploadData = Hash::get($this->_uploadData, $field->handle); - - if (!$uploadData) { - return; - } - - $data = Hash::get($uploadData, 'data'); - - if (empty($data)) { - return; - } - - if (!is_array($data)) { - $data = array($data); - } - - if (isset($uploadData['options']['upload'])) { - // Get the folder we should upload into from the field - $folderId = $field->getFieldType()->resolveSourcePath(); - - $ids = $this->fetchRemoteImage($data, $folderId, $uploadData['options']); - - $fieldData[$handle] = $ids; - } - - // Check for field limit - only return the specified amount - if ($fieldData[$handle]) { - if ($field->settings['limit']) { - $assetChunks = array_chunk($fieldData[$handle], $field->settings['limit']); - $fieldData[$handle] = $assetChunks[0]; - } - } - - // Check if we've got any data for the fields in this element - if (isset($uploadData['fields']) && is_array($ids)) { - $this->_populateElementFields($ids, $uploadData['fields']); - } - - return true; - } - - - public function fetchRemoteImage($urls, $folderId, $options) - { - $conflictResolution = $options['conflict']; - - if (!is_array($urls)) { - $urls = array($urls); - } - - $fileIds = array(); - $tempPath = craft()->path->getTempPath(); - - // Check if the temp path exists first - if (!IOHelper::getRealPath($tempPath)) { - IOHelper::createFolder($tempPath, craft()->config->get('defaultFolderPermissions'), true); - - if (!IOHelper::getRealPath($tempPath)) { - throw new Exception(Craft::t('Temp folder “{tempPath}” does not exist and could not be created', array('tempPath' => $tempPath))); - } - } - - // Download each image - foreach ($urls as $key => $url) { - if (!isset($url) || $url === '') { - continue; - } - - // Extract the filename from the URL. This is through our own function to determine this due to the wide variety - // of URLs that can be provided in a feed. Most importantly, factoring in query string information - $filename = $this->_getPathFilename($url); - - // Get the extension - $extension = IOHelper::getExtension($filename); - - // Check if this URL has a file extension - sometimes its a dynamic URL without a filename and extension - // so when we get to saving the asset in Craft, it doesn't have a (useful) filename, so we generate one. - - if (!$extension) { - // Generate a hash of the URL - this constitutes our ID - $filename = AssetsHelper::cleanAssetName(md5($url)); - - // Detect the mime type from url content - $finfo = new \finfo(FILEINFO_MIME_TYPE); - $type = $finfo->buffer(file_get_contents($url)); - $extension = FileHelper::getExtensionByMimeType($type); - - if (!ImageHelper::isImageManipulatable($extension)) { - $extension = 'jpg'; - } - - $filename = $filename . $extension; - } - - $saveLocation = $tempPath . $filename; - - // If the folder ID is not numeric, we're likely setting the name of the folder, not the ID - // So either get the existing folder by name, or create a new one. - if (!is_numeric($folderId)) { - $existingFolder = craft()->assets->findFolder(array( - 'parentId' => $options['rootFolderId'], - 'name' => $folderId, - )); - - if ($existingFolder) { - $folderId = $existingFolder->id; - } else { - $rootFolder = craft()->assets->getFolderById($options['rootFolderId']); - $folderId = $this->_createSubFolder($rootFolder, $folderId); - } - } - - // Check to see if there are any matching existing assets - $criteria = craft()->elements->getCriteria(ElementType::Asset); - $criteria->status = null; - $criteria->folderId = $folderId; - $criteria->filename = $filename; - $existing = $criteria->find(); - - // If there's an existing file, but we want to keep the existing one, exit before trying to download - much faster! - if ($conflictResolution == AssetConflictResolution::Cancel && isset($existing[0])) { - $fileIds[] = $existing[0]->id; - continue; - } - - // Cleanup filenames for Curl specifically - $curlUrl = str_replace(' ', '%20', $url); - - // Download the file - ensuring we're not loading into memory for efficiency - $defaultOptions = array( - CURLOPT_FILE => fopen($saveLocation, 'w'), - CURLOPT_FOLLOWLOCATION => true, - CURLOPT_URL => $curlUrl, - CURLOPT_FAILONERROR => true, - ); - - $configOptions = craft()->config->get('curlOptions', 'feedMe'); - - if ($configOptions) { - $opts = $configOptions + $defaultOptions; - } else { - $opts = $defaultOptions; - } - - $ch = curl_init(); - curl_setopt_array($ch, $opts); - $result = curl_exec($ch); - - if ($result === false) { - FeedMePlugin::log('Asset error: ' . $url . ' - ' . curl_error($ch), LogLevel::Error, true); - continue; - } - - // Wrap in a try/catch to ensure any errors with saving an asset are logged, but don't break the import process - try { - $response = craft()->assets->insertFileByLocalPath($saveLocation, $filename, $folderId, $conflictResolution); - - // Delete temporary file - IOHelper::deleteFile($saveLocation, true); - - if ($response->isSuccess()) { - $fileId = $response->getDataItem('fileId'); - - if ($fileId) { - $fileIds[] = $fileId; - } - } else { - FeedMePlugin::log('Asset error: ' . $url . ' - ' . $response->errorMessage, LogLevel::Error, true); - continue; - } - } catch (Exception $e) { - FeedMePlugin::log('Asset error: ' . $url . ' - ' . $e->getMessage(), LogLevel::Error, true); - } - } - - return $fileIds; - } - - - - // Private Methods - // ========================================================================= - - private function _populateElementFields($assetData, $fieldData) - { - foreach ($assetData as $i => $assetId) { - $asset = craft()->assets->getFileById($assetId); - - // Prep each inner field - $preppedData = array(); - foreach ($fieldData as $fieldHandle => $fieldContent) { - $data = craft()->feedMe_fields->prepForFieldType(null, $fieldContent, $fieldHandle, null); - - if (is_array($data)) { - $data = Hash::get($data, $i); - } - - $preppedData[$fieldHandle] = $data; - - if (craft()->config->get('checkExistingFieldData', 'feedMe')) { - $field = craft()->fields->getFieldByHandle($fieldHandle); - - craft()->feedMe_fields->checkExistingFieldData($asset, $preppedData, $fieldHandle, $field); - } - } - - if ($preppedData) { - $asset->setContentFromPost($preppedData); - - if (!craft()->assets->storeFile($asset)) { - FeedMePlugin::log('Asset error: ' . json_encode($asset->getErrors()), LogLevel::Error, true); - } else { - FeedMePlugin::log('Updated Asset (ID ' . $assetId . ') inner-element with content: ' . json_encode($preppedData), LogLevel::Info, true); - } - } - } - } - - private function _createSubFolder($currentFolder, $folderName) - { - $response = craft()->assets->createFolder($currentFolder->id, $folderName); - - if ($response->isError() || $response->isConflict()) - { - // If folder doesn't exist in DB, but we can't create it, it probably exists on the server. - $newFolder = new AssetFolderModel( - array( - 'parentId' => $currentFolder->id, - 'name' => $folderName, - 'sourceId' => $currentFolder->sourceId, - 'path' => ($currentFolder->parentId ? $currentFolder->path.$folderName : $folderName).'/' - ) - ); - $folderId = craft()->assets->storeFolder($newFolder); - - return $folderId; - } - else - { - $folderId = $response->getDataItem('folderId'); - - return $folderId; - } - } - - private function _getPathFilename($url) - { - // Function to extract a filename from a URL path. It does not query the actual URL however. - // There are some tricky cases being tested again, and mostly revolves around query strings. We do our best to figure it out! - // http://example.com/test.php - // http://example.com/test.php?pubid=image.jpg - // http://example.com/image.jpg?width=1280&cid=5049 - // http://example.com/image.jpg?width=1280&cid=5049&un=support%40gdomain.com - // http://example.com/test - // http://example.com/test?width=1280&cid=5049 - // http://example.com/test?width=1280&cid=5049&un=support%40gdomain.com - - // First, lets check the query string values. We essentially convert to an array, check each - // item in the array, then put the URL back together again. - $parts = parse_url($url); - - // Get some query string - if there's any for this URL - if (isset($parts['query'])) { - parse_str($parts['query'], $queryParams); - } else { - $queryParams = array(); - } - - foreach ($queryParams as $key => $param) { - // A special case for emails, which contain a '.com', which can be thought of as a extension - wrong! - if (filter_var($param, FILTER_VALIDATE_EMAIL)) { - unset($queryParams[$key]); - } - } - - // Put the URL back together again with the parsed query string - $parts['query'] = http_build_query($queryParams); - $url = http_build_url($parts); - - // Now we have a reasonably clean URL - SPLFileInfo does the best at getting the extension from - // either the regular path of a URL, or even if it exists as a query string in the URL - $info = new \SplFileInfo($url); - - // Check the extension - $extension = $info->getExtension(); - - // SplFileInfo can sometimes keep the query string info - strip it out (we no longer need it) - $extension = UrlHelper::stripQueryString($extension); - - // Now finally, we actually want to return the filename of the image. This is tricky, because you could have: - // http://example.com/image.jpg - // http://example.com/generate.php?pubid=image.jpg - // And we only want media files to put in an asset field (presumably), rather than .php or other dynamic script names - // But - with our known extension, we can grab them with some Regex - - if ($extension) { - preg_match('/[^\/=\\&\?]+\.'.$extension.'(?=[\?&].*$|$)/', $url, $matches); - - $filename = count($matches) ? $matches[0] : ''; - } else { - $filename = ''; - } - - return $filename; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/BaseFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/BaseFeedMeFieldType.php deleted file mode 100644 index 7ebd8893..00000000 --- a/feedme/FeedMe/FieldTypes/BaseFeedMeFieldType.php +++ /dev/null @@ -1,92 +0,0 @@ - $data) { - // Only check for string content at this stage - if (!is_array($data)) { - // Don't process the data unless we detect a Twig tag - also performance - if (strpos($data, '{') !== false) { - - $variable = preg_replace('/(?$variable) || strstr($variable, '{{')) { - $feedData[$attribute] = craft()->templates->renderObjectTemplate($data, $element); - } - } - } - } - } - - public function checkExistingFieldData($element, $field, &$feedData, $handle) - { - // Check against existing and to-be-inserted content for each field. If it matches exactly - // then we're wasting time updating the content. For performance, take it out of the elements' - // field content. - $fieldHandle = $field->handle; - - if (isset($element->content->$fieldHandle)) { - $existingData = $element->content->$fieldHandle; - } else { - $existingData = null; - } - - // Give the field type a chance to prep the existing data for use - $fieldType = $field->getFieldType(); - - if ($fieldType) { - $fieldType->element = $element; - $existingData = $fieldType->prepValue($existingData); - } - - $fieldData = Hash::get($feedData, $handle); - - if ($existingData instanceof ElementCriteriaModel) { - $existingData = $existingData->ids(); - } - - // Remove from the feed if there's a match of data - if ($existingData == $fieldData) { - unset($feedData[$handle]); - } - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/CategoriesFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/CategoriesFeedMeFieldType.php deleted file mode 100644 index a9a5c8be..00000000 --- a/feedme/FeedMe/FieldTypes/CategoriesFeedMeFieldType.php +++ /dev/null @@ -1,133 +0,0 @@ -getFieldType()->getSettings(); - - // Get source id's for connecting - $source = $settings->getAttribute('source'); - list($type, $groupId) = explode(':', $source); - - // Find existing - foreach ($data as $category) { - $criteria = craft()->elements->getCriteria(ElementType::Category); - $criteria->status = null; - $criteria->groupId = $groupId; - $criteria->limit = $settings->limit; - - // Check if we've specified which attribute we're trying to match against - $attribute = Hash::get($fieldData, 'options.match', 'title'); - $criteria->$attribute = DbHelper::escapeParam($category); - $elements = $criteria->ids(); - - $preppedData = array_merge($preppedData, $elements); - - // Create the elements if we require - if (count($elements) == 0) { - if (isset($fieldData['options']['create'])) { - $preppedData[] = $this->_createElement($category, $groupId); - } - } - } - - // Check for field limit - only return the specified amount - if ($preppedData) { - if ($field->settings['limit']) { - $preppedData = array_chunk($preppedData, $field->settings['limit']); - $preppedData = $preppedData[0]; - } - } - - // Check if we've got any data for the fields in this element - if (isset($fieldData['fields'])) { - $this->_populateElementFields($preppedData, $fieldData['fields']); - } - - return $preppedData; - } - - - - // Private Methods - // ========================================================================= - - private function _populateElementFields($categoryData, $fieldData) - { - foreach ($categoryData as $i => $categoryId) { - $category = craft()->categories->getCategoryById($categoryId); - - // Prep each inner field - $preppedData = array(); - foreach ($fieldData as $fieldHandle => $fieldContent) { - $data = craft()->feedMe_fields->prepForFieldType(null, $fieldContent, $fieldHandle, null); - - if (is_array($data)) { - $data = Hash::get($data, $i); - } - - $preppedData[$fieldHandle] = $data; - - if (craft()->config->get('checkExistingFieldData', 'feedMe')) { - $field = craft()->fields->getFieldByHandle($fieldHandle); - - craft()->feedMe_fields->checkExistingFieldData($category, $preppedData, $fieldHandle, $field); - } - } - - if ($preppedData) { - $category->setContentFromPost($preppedData); - - if (!craft()->categories->saveCategory($category)) { - FeedMePlugin::log('Category error: ' . json_encode($category->getErrors()), LogLevel::Error, true); - } else { - FeedMePlugin::log('Updated Category (ID ' . $categoryId . ') inner-element with content: ' . json_encode($preppedData), LogLevel::Info, true); - } - } - } - } - - private function _createElement($category, $groupId) - { - $element = new CategoryModel(); - $element->getContent()->title = $category; - $element->groupId = $groupId; - - // Save category - if (craft()->categories->saveCategory($element)) { - return $element->id; - } else { - throw new Exception(json_encode($element->getErrors())); - } - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/CheckboxesFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/CheckboxesFeedMeFieldType.php deleted file mode 100644 index 51748846..00000000 --- a/feedme/FeedMe/FieldTypes/CheckboxesFeedMeFieldType.php +++ /dev/null @@ -1,51 +0,0 @@ -getFieldType()->getSettings(); - $options = $settings->getAttribute('options'); - - $attribute = Hash::get($fieldData, 'options.match', 'value'); - - foreach ($options as $option) { - foreach ($data as $dataValue) { - if ($dataValue == $option[$attribute]) { - $preppedData[] = $option['value']; - } - } - } - - return $preppedData; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/Commerce_ProductsFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/Commerce_ProductsFeedMeFieldType.php deleted file mode 100644 index 461f79c6..00000000 --- a/feedme/FeedMe/FieldTypes/Commerce_ProductsFeedMeFieldType.php +++ /dev/null @@ -1,76 +0,0 @@ -getFieldType()->getSettings(); - - $typeIds = array(); - $types = $settings->getAttribute('sources'); - - if (is_array($types)) { - foreach ($types as $type) { - list(, $id) = explode(':', $type); - } - } - - // Find existing - foreach ($data as $product) { - $criteria = craft()->elements->getCriteria('Commerce_Product'); - $criteria->status = null; - $criteria->typeId = $typeIds; - $criteria->limit = $settings->limit; - - // Check if we've specified which attribute we're trying to match against - $attribute = Hash::get($fieldData, 'options.match', 'title'); - $criteria->$attribute = DbHelper::escapeParam($product); - $elements = $criteria->ids(); - - $preppedData = array_merge($preppedData, $elements); - } - - // Check for field limit - only return the specified amount - if ($preppedData) { - if ($field->settings['limit']) { - $preppedData = array_chunk($preppedData, $field->settings['limit']); - $preppedData = $preppedData[0]; - } - } - - // Check if we've got any data for the fields in this element - if (isset($fieldData['fields'])) { - $this->_populateElementFields($preppedData, $fieldData['fields']); - } - - return $preppedData; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/DateFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/DateFeedMeFieldType.php deleted file mode 100644 index 6b1900a4..00000000 --- a/feedme/FeedMe/FieldTypes/DateFeedMeFieldType.php +++ /dev/null @@ -1,41 +0,0 @@ -templates->renderObjectTemplate($data, $element); - } - - $dateValue = FeedMeDateHelper::parseString($data, $formatting); - - if ($dateValue) { - return DateTimeHelper::formatTimeForDb($dateValue); - } else { - return ""; - } - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/DefaultFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/DefaultFeedMeFieldType.php deleted file mode 100644 index 1ac3d9cf..00000000 --- a/feedme/FeedMe/FieldTypes/DefaultFeedMeFieldType.php +++ /dev/null @@ -1,28 +0,0 @@ -getFieldType()->getSettings(); - $options = $settings->getAttribute('options'); - - $attribute = Hash::get($fieldData, 'options.match', 'value'); - - foreach ($options as $option) { - if ($data == $option[$attribute]) { - $preppedData = $option['value']; - break; - } - } - - return $preppedData; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/EntriesFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/EntriesFeedMeFieldType.php deleted file mode 100644 index 5ab1c337..00000000 --- a/feedme/FeedMe/FieldTypes/EntriesFeedMeFieldType.php +++ /dev/null @@ -1,158 +0,0 @@ -getFieldType()->getSettings(); - - // Get source id's for connecting - $sectionIds = array(); - $sources = $settings->sources; - - if (is_array($sources)) { - foreach ($sources as $source) { - // When singles is selected as the only option to search in, it doesn't contain any ids... - if ($source == 'singles') { - foreach (craft()->sections->getAllSections() as $section) { - $sectionIds[] = ($section->type == 'single') ? $section->id : ''; - } - } else { - list($type, $id) = explode(':', $source); - $sectionIds[] = $id; - } - } - } else if ($sources === '*') { - $sectionIds = '*'; - } - - // Find existing - foreach ($data as $entry) { - $criteria = craft()->elements->getCriteria(ElementType::Entry); - $criteria->status = null; - $criteria->sectionId = $sectionIds; - $criteria->limit = $settings->limit; - - // Check if we've specified which attribute we're trying to match against - $attribute = Hash::get($fieldData, 'options.match', 'title'); - $criteria->$attribute = DbHelper::escapeParam($entry); - $elements = $criteria->ids(); - - $preppedData = array_merge($preppedData, $elements); - - // Create the elements if we require - if (count($elements) == 0) { - if (isset($fieldData['options']['create'])) { - $preppedData[] = $this->_createElement($entry, $sectionIds, $attribute); - } - } - } - - // Check for field limit - only return the specified amount - if ($preppedData) { - if ($field->settings['limit']) { - $preppedData = array_chunk($preppedData, $field->settings['limit']); - $preppedData = $preppedData[0]; - } - } - - // Check if we've got any data for the fields in this element - if (isset($fieldData['fields'])) { - $this->_populateElementFields($preppedData, $fieldData['fields']); - } - - return $preppedData; - } - - - - // Private Methods - // ========================================================================= - - private function _populateElementFields($entryData, $fieldData) - { - foreach ($entryData as $i => $entryId) { - $entry = craft()->entries->getEntryById($entryId); - - // Prep each inner field - $preppedData = array(); - foreach ($fieldData as $fieldHandle => $fieldContent) { - $data = craft()->feedMe_fields->prepForFieldType(null, $fieldContent, $fieldHandle, null); - - if (is_array($data)) { - $data = Hash::get($data, $i); - } - - $preppedData[$fieldHandle] = $data; - - if (craft()->config->get('checkExistingFieldData', 'feedMe')) { - $field = craft()->fields->getFieldByHandle($fieldHandle); - - craft()->feedMe_fields->checkExistingFieldData($entry, $preppedData, $fieldHandle, $field); - } - } - - if ($preppedData) { - $entry->setContentFromPost($preppedData); - - if (!craft()->entries->saveEntry($entry)) { - FeedMePlugin::log('Entry error: ' . json_encode($entry->getErrors()), LogLevel::Error, true); - } else { - FeedMePlugin::log('Updated Entry (ID ' . $entryId . ') inner-element with content: ' . json_encode($preppedData), LogLevel::Info, true); - } - } - } - } - - private function _createElement($entry, $sectionIds, $attribute) - { - $fieldSections = array_values(Hash::filter($sectionIds)); - $firstSectionId = $fieldSections[0]; - - $element = new EntryModel(); - - if ($attribute == 'title') { - $element->getContent()->title = $entry; - } else { - $element->$attribute = DbHelper::escapeParam($entry); - } - - $element->sectionId = $firstSectionId; - - // Save category - if (craft()->entries->saveEntry($element)) { - return $element->id; - } else { - throw new Exception(json_encode($element->getErrors())); - } - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/LightswitchFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/LightswitchFeedMeFieldType.php deleted file mode 100644 index 499062ec..00000000 --- a/feedme/FeedMe/FieldTypes/LightswitchFeedMeFieldType.php +++ /dev/null @@ -1,25 +0,0 @@ -matrix->getBlockTypesByFieldId($field->id, 'handle'); - - // Ensure when importing only one block thats its treated correctly. - $keys = array_keys($data); - - if (!is_numeric($keys[0])) { - $data = array($data); - } - - // If we've got Matrix data like 0.0.blockHandle.fieldHandle - then we've got a problem. - // Commonly, this will be due to a field being referenced outside of inner-repeatable Matrix data. - $hasOrphanedData = false; - - foreach (Hash::flatten($data) as $key => $value) { - if (preg_match('/^\d+\.\d+/', $key)) { - $hasOrphanedData = true; - break; - } - } - - if ($hasOrphanedData) { - $seperateBlockData = array(); - - foreach ($data as $sortKey => $sortData) { - foreach ($sortData as $blockHandle => $blockFieldData) { - if (!is_numeric($blockHandle)) { - $seperateBlockData[$blockHandle] = $blockFieldData; - - unset($data[$sortKey][$blockHandle]); - } - } - } - - // Now, append this content to each block that we're importing, so it gets sorted out properly - if ($seperateBlockData) { - foreach ($data as $sortKey => $sortData) { - foreach ($sortData as $blockHandle => $blockFieldData) { - $data[$sortKey][$blockHandle] = array_merge_recursive($blockFieldData, $seperateBlockData); - } - } - - $data = $data[0]; - } - } - - foreach ($data as $sortKey => $sortData) { - $blockData = array(); - - foreach ($sortData as $blockHandle => $blockFieldData) { - $preppedFieldData = array(); - - foreach ($blockFieldData as $blockFieldHandle => $blockFieldContent) { - - // Get the Matrix-contexted field for our regular field-prepping function - $blockType = $blockTypes[$blockHandle]; - - foreach ($blockType->getFields() as $f) { - if ($f->handle == $blockFieldHandle) { - $subField = $f; - } - } - - // Check to see if this is information for a block - if ($blockFieldHandle == 'block') { - foreach ($blockFieldContent as $blockFieldOption => $blockFieldOptionValue) { - $blockData[$blockHandle][$blockFieldOption] = Hash::get($blockFieldOptionValue, 'data'); - } - } - - if (!isset($subField)) { - continue; - } - - $fieldOptions = array( - 'field' => $subField, - ); - - // Special-case for table! - if ($subField->type == 'Table' || $subField->type == 'SuperTable') { - $blockFieldContent = array('data' => $blockFieldContent); - } - - // Parse this inner-field's data, just like a regular field - $parsedData = craft()->feedMe_fields->prepForFieldType(null, $blockFieldContent, $blockFieldHandle, $fieldOptions); - - // Fire any post-processing for the field type - $posted = craft()->feedMe_fields->postForFieldType(null, $parsedData, $blockFieldHandle, $subField); - - if ($posted) { - $parsedData = $parsedData[$blockFieldHandle]; - } - - if ($parsedData) { - $preppedFieldData[$blockFieldHandle] = $parsedData; - } - } - - if ($preppedFieldData) { - $order = $sortKey + 1; - $enabled = true; - - if (isset($blockData[$blockHandle]['enabled'])) { - $enabled = FeedMeHelper::parseBoolean($blockData[$blockHandle]['enabled']); - } - - $preppedData['new' . $order] = array( - 'type' => $blockHandle, - 'order' => $order, - 'enabled' => $enabled, - 'fields' => $preppedFieldData, - ); - } - } - } - - return $preppedData; - } - - // Allows us to smartly-check to look at existing Matrix fields for an element, and whether data has changed or not. - // No need to update Matrix blocks unless content has changed, which causes needless new elements to be created. - public function checkExistingFieldData($element, $field, &$feedData, $handle) - { - $existingFieldData = array(); - $fieldData = Hash::get($feedData, $handle); - - // Get our Matrix blocks from the existing element - $blocks = $element->getFieldValue($field->handle); - - foreach ($blocks as $key => $block) { - $fieldValues = array(); - - // Get all the inner fields for this Matrix block - foreach ($block->getFieldLayout()->getFields() as $fieldLayoutField) { - $innerField = $fieldLayoutField->getField(); - - // Get the inner field content - $fieldValue = $block->getFieldValue($innerField->handle); - - // If we have an Element Criteria Model (Entries, Assets, etc), get the ids - if ($fieldValue instanceof ElementCriteriaModel) { - $fieldValue = $fieldValue->ids(); - } - - if ($fieldValue) { - $fieldValues[$innerField->handle] = $fieldValue; - } - } - - // Create an array of content so that it matches what we use to import - easy to compare this way - $existingFieldData['new'.($key+1)] = array( - 'type' => $block->type->handle, - 'order' => $block->sortOrder, - 'enabled' => $block->type->enabled, - 'fields' => $fieldValues, - ); - } - - // Now, we should have identically formatted existing content to how we're about to import. - // Simply see if the arrays match exactly - size and attributes must be identical - if ($existingFieldData == $fieldData) { - // If they do equal, then nothing has changed from existing content. Se, we want to remove our mapped - // data from the feed entirely, so the element doesn't get updated (because it doesn't need to), - unset($feedData[$handle]); - } - } - -} diff --git a/feedme/FeedMe/FieldTypes/MultiSelectFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/MultiSelectFeedMeFieldType.php deleted file mode 100644 index f5db95ad..00000000 --- a/feedme/FeedMe/FieldTypes/MultiSelectFeedMeFieldType.php +++ /dev/null @@ -1,51 +0,0 @@ -getFieldType()->getSettings(); - $options = $settings->getAttribute('options'); - - $attribute = Hash::get($fieldData, 'options.match', 'value'); - - foreach ($options as $option) { - foreach ($data as $dataValue) { - if ($dataValue == $option[$attribute]) { - $preppedData[] = $option['value']; - } - } - } - - return $preppedData; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/NumberFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/NumberFeedMeFieldType.php deleted file mode 100644 index 05549f54..00000000 --- a/feedme/FeedMe/FieldTypes/NumberFeedMeFieldType.php +++ /dev/null @@ -1,25 +0,0 @@ -getFieldType()->getSettings(); - $options = $settings->getAttribute('options'); - - $attribute = Hash::get($fieldData, 'options.match', 'value'); - - foreach ($options as $option) { - if ($data == $option[$attribute]) { - $preppedData = $option['value']; - break; - } - } - - return $preppedData; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/TableFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/TableFeedMeFieldType.php deleted file mode 100644 index f2201fa4..00000000 --- a/feedme/FeedMe/FieldTypes/TableFeedMeFieldType.php +++ /dev/null @@ -1,105 +0,0 @@ - $value) { - preg_match('/^(col\d+)/', $key, $matches); - - if (isset($matches[1]) && $matches[1] != '') { - $index = $matches[1]; - } else { - $index = 0; - } - - $parsedData[$index][] = $value; - }*/ - - if (Hash::dimensions($data) == 2) { - $data = array($data); - } - - // Normalise some data - $parsedData = array(); - - // Normalise row data - foreach (Hash::flatten($data) as $key => $value) { - preg_match('/(col\d+)/', $key, $colMatches); - - $colIndex = Hash::get($colMatches, '1'); - - if (!is_null($colIndex)) { - $parsedData[$colIndex][] = $value; - } - } - - $data = Hash::expand($parsedData); - - // Normalise some data - $parsedData = array(); - - foreach (Hash::flatten($data) as $key => $value) { - preg_match('/^(col\d+)/', $key, $colMatches); - preg_match('/(\d+)$/', $key, $rowMatches); - - $colIndex = Hash::get($colMatches, '1'); - $rowIndex = Hash::get($rowMatches, '1'); - - if (!is_null($colIndex) && !is_null($rowIndex)) { - $index = $rowIndex . '.data.' . $colIndex; - $parsedData[$index] = $value; - } else { - $parsedData[$key] = $value; - } - } - - $data = Hash::expand($parsedData); - - foreach ($data as $i => $row) { - if (isset($row['data'])) { - $row = $row['data']; - } - - foreach ($row as $j => $column) { - if (!isset($column['data'])) { - $column = array('data' => $column); - } - - // Check for false for checkbox - if ($column['data'] === 'false') { - $column['data'] = null; - } - - $preppedData[($i)][$j] = $column['data']; - } - } - - return $preppedData; - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/TagsFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/TagsFeedMeFieldType.php deleted file mode 100644 index 7e1bb7df..00000000 --- a/feedme/FeedMe/FieldTypes/TagsFeedMeFieldType.php +++ /dev/null @@ -1,121 +0,0 @@ -getFieldType()->getSettings(); - - // Get tag group id - $source = $settings->getAttribute('source'); - list($type, $groupId) = explode(':', $source); - - // Find existing - foreach ($data as $tag) { - $criteria = craft()->elements->getCriteria(ElementType::Tag); - $criteria->status = null; - $criteria->groupId = $groupId; - $criteria->title = DbHelper::escapeParam($tag); - - $elements = $criteria->ids(); - - $preppedData = array_merge($preppedData, $elements); - - // Create the elements if we require - if (count($elements) == 0) { - if (isset($fieldData['options']['create'])) { - $preppedData[] = $this->_createElement($tag, $groupId); - } - } - } - - // Check if we've got any data for the fields in this element - if (isset($fieldData['fields'])) { - $this->_populateElementFields($preppedData, $fieldData['fields']); - } - - return $preppedData; - } - - - // Private Methods - // ========================================================================= - - private function _populateElementFields($tagData, $fieldData) - { - foreach ($tagData as $i => $tagId) { - $tag = craft()->tags->getTagById($tagId, null); - - // Prep each inner field - $preppedData = array(); - foreach ($fieldData as $fieldHandle => $fieldContent) { - $data = craft()->feedMe_fields->prepForFieldType(null, $fieldContent, $fieldHandle, null); - - if (is_array($data)) { - $data = Hash::get($data, $i); - } - - $preppedData[$fieldHandle] = $data; - - if (craft()->config->get('checkExistingFieldData', 'feedMe')) { - $field = craft()->fields->getFieldByHandle($fieldHandle); - - craft()->feedMe_fields->checkExistingFieldData($tag, $preppedData, $fieldHandle, $field); - } - } - - if ($preppedData) { - $tag->setContentFromPost($preppedData); - - if (!craft()->tags->saveTag($tag)) { - FeedMePlugin::log('Tag error: ' . json_encode($tag->getErrors()), LogLevel::Error, true); - } else { - FeedMePlugin::log('Updated Tag (ID ' . $tagId . ') inner-element with content: ' . json_encode($preppedData), LogLevel::Info, true); - } - } - } - } - - private function _createElement($tag, $groupId) - { - $element = new TagModel(); - $element->getContent()->title = $tag; - $element->groupId = $groupId; - - // Save tag - if (craft()->tags->saveTag($element)) { - return $element->id; - } else { - throw new Exception(json_encode($element->getErrors())); - } - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/FieldTypes/UsersFeedMeFieldType.php b/feedme/FeedMe/FieldTypes/UsersFeedMeFieldType.php deleted file mode 100644 index b556dc6a..00000000 --- a/feedme/FeedMe/FieldTypes/UsersFeedMeFieldType.php +++ /dev/null @@ -1,139 +0,0 @@ -getFieldType()->getSettings(); - - // Get source id's for connecting - $groupIds = array(); - $sources = $settings->sources; - if (is_array($sources)) { - foreach ($sources as $source) { - list($type, $id) = explode(':', $source); - $groupIds[] = $id; - } - } - - // Find existing - foreach ($data as $user) { - $criteria = craft()->elements->getCriteria(ElementType::User); - $criteria->status = null; - $criteria->groupId = $groupIds; - $criteria->limit = $settings->limit; - - // Check if we've specified which attribute we're trying to match against - $attribute = Hash::get($fieldData, 'options.match', 'email'); - $criteria->$attribute = DbHelper::escapeParam($user); - $elements = $criteria->ids(); - - $preppedData = array_merge($preppedData, $elements); - - // Create the elements if we require - if (count($elements) == 0) { - if (isset($fieldData['options']['create'])) { - $preppedData[] = $this->_createElement($user, $groupIds); - } - } - } - - // Check for field limit - only return the specified amount - if ($preppedData) { - if ($field->settings['limit']) { - $preppedData = array_chunk($preppedData, $field->settings['limit']); - $preppedData = $preppedData[0]; - } - } - - // Check if we've got any data for the fields in this element - if (isset($fieldData['fields'])) { - $this->_populateElementFields($preppedData, $fieldData['fields']); - } - - return $preppedData; - } - - - - // Private Methods - // ========================================================================= - - private function _populateElementFields($userData, $fieldData) - { - foreach ($userData as $i => $userId) { - $user = craft()->users->getUserById($userId); - - // Prep each inner field - $preppedData = array(); - foreach ($fieldData as $fieldHandle => $fieldContent) { - $data = craft()->feedMe_fields->prepForFieldType(null, $fieldContent, $fieldHandle, null); - - if (is_array($data)) { - $data = Hash::get($data, $i); - } - - $preppedData[$fieldHandle] = $data; - - if (craft()->config->get('checkExistingFieldData', 'feedMe')) { - $field = craft()->fields->getFieldByHandle($fieldHandle); - - craft()->feedMe_fields->checkExistingFieldData($user, $preppedData, $fieldHandle, $field); - } - } - - if ($preppedData) { - $user->setContentFromPost($preppedData); - - if (!craft()->users->saveUser($user)) { - FeedMePlugin::log('User error: ' . json_encode($user->getErrors()), LogLevel::Error, true); - } else { - FeedMePlugin::log('Updated User (ID ' . $userId . ') inner-element with content: ' . json_encode($preppedData), LogLevel::Info, true); - } - } - } - } - - private function _createElement($user, $groupIds) - { - $element = new UserModel(); - $element->email = $user; - $element->groupId = $groupIds; - - // Save category - if (craft()->users->saveUser($element)) { - return $element->id; - } else { - throw new Exception(json_encode($element->getErrors())); - } - } - -} \ No newline at end of file diff --git a/feedme/FeedMe/Helpers/FeedMeArrayHelper.php b/feedme/FeedMe/Helpers/FeedMeArrayHelper.php deleted file mode 100644 index 974a4857..00000000 --- a/feedme/FeedMe/Helpers/FeedMeArrayHelper.php +++ /dev/null @@ -1,127 +0,0 @@ - 1) { - $key = array_shift($keys); - - // If the key doesn't exist at this depth, we will just create an empty array - // to hold the next value, allowing us to create the arrays to hold final - // values at the correct depth. Then we'll keep digging into the array. - if (! isset($array[$key]) || ! is_array($array[$key])) { - $array[$key] = []; - } - - $array = &$array[$key]; - } - - $array[array_shift($keys)] = $value; - - return $array; - } - - public static function arrayGet($array, $key, $default = null) - { - if (is_null($key)) { - return $array; - } - - if (isset($array[$key])) { - return $array[$key]; - } - - // Store resulting array if key contains wildcard. - $deepArray = array(); - $keys = preg_split('/\^|\./', $key); - - foreach ($keys as $n => $segment) { - if ($segment == '*') { - // Get the rest of the keys besides current one. - $keySlice = array_slice($keys, $n+1); - // Generate new dot notation key string. - $innerKey = implode('^', $keySlice); - - if (is_array($array)) { - foreach ($array as $d => $item) { - // Empty slice - last segment is a wildcard. - if (empty($keySlice)) { - // Last segment is a wildcard. Put item into deepArray which will be returned - // containing all of the items of the current array. - $deepArray[] = $item; - } else { - // Pass current array item deeper. - $innerItem = FeedMeArrayHelper::arrayGet($item, $innerKey, $default); - - if (is_array($innerItem) and count(array_keys($keys, '*')) > 1) { - // Multiple wildcards, add each item of inner array to the resulting new array. - foreach ($innerItem as $innerItem) { - $deepArray[$d][] = $innerItem; - } - } else { - // Only one wildcard in current key string. Add whole inner array to the resulting array. - $deepArray[] = $innerItem; - } - } - } - - // Return new resulting array. - return $deepArray; - } elseif ($n == count($keys) - 1) { - // This is the last key, so we can simply return whole array. - return $array; - } else { - // This is not the last key and $array is not really an array - // so we can't proceed deeper. Return default. - return $default; - } - } elseif (!is_array($array) || !array_key_exists($segment, $array)) { - return $default; - } - - $array = $array[$segment]; - } - - return $array; - } - - public static function findByPartialKey($array, $partialKey) - { - $results = array(); - - foreach ($array as $key => $value) { - if (strstr($key, $partialKey)) { - $results[$key] = $value; - } - } - - return $results; - } - - public static function findKeyByValue($array, $findValue) - { - $results = array(); - - foreach ($array as $key => $value) { - if ($findValue == $value) { - $results[$key] = $value; - } - } - - return $results; - } -} \ No newline at end of file diff --git a/feedme/FeedMe/Helpers/FeedMeDateHelper.php b/feedme/FeedMe/Helpers/FeedMeDateHelper.php deleted file mode 100644 index 7bffb4b8..00000000 --- a/feedme/FeedMe/Helpers/FeedMeDateHelper.php +++ /dev/null @@ -1,94 +0,0 @@ -toDateTimeString(); - - $parsedDate = DateTime::createFromString($dateTimeString, null, true); - } - } catch (\Exception $e) { - FeedMePlugin::log('Date parse error: ' . $date . ' - ' . $e->getMessage(), LogLevel::Error, true); - } - - return $parsedDate; - } - - public static function getDateTimeString($date) - { - if (is_array($date) && (isset($date['date']) || isset($date['time']))) { - $dateObject = DateTime::createFromString($date); - } else { - $dateObject = DateTime::createFromString($date, craft()->timezone); - } - - return $dateObject->format('Y-m-d H:i:s'); - } - - public static function isTimestamp($string) - { - try { - new DateTime('@' . $string); - } catch(\Exception $e) { - return false; - } - - return true; - } - -} diff --git a/feedme/FeedMe/Helpers/FeedMeDuplicate.php b/feedme/FeedMe/Helpers/FeedMeDuplicate.php deleted file mode 100644 index bee67c6f..00000000 --- a/feedme/FeedMe/Helpers/FeedMeDuplicate.php +++ /dev/null @@ -1,60 +0,0 @@ -requestProduct = $product; - $this->requestVersion = $productVersion; - - $endpoint .= craft()->config->get('endpointSuffix'); - $this->_endpoint = $endpoint; - $userEmail = craft()->userSession->getUser() ? craft()->userSession->getUser()->email : ''; - - // Cater for pre-Craft 2.6.2951 - if (version_compare(craft()->getVersion(), '2.6.2951', '<')) { - $version = craft()->getVersion() . '.' . craft()->getBuild(); - } else { - $version = craft()->getVersion(); - } - - $attributes = array( - 'requestUrl' => craft()->request->getHostInfo() . craft()->request->getUrl(), - 'requestIp' => craft()->request->getIpAddress(), - 'requestTime' => DateTimeHelper::currentTimeStamp(), - 'requestPort' => craft()->request->getPort(), - - 'craftVersion' => $version, - 'craftEdition' => craft()->getEdition(), - 'userEmail' => $userEmail, - - 'requestProduct' => $this->requestProduct, - 'requestVersion' => $this->requestVersion, - 'licenseKey' => $licenseKey - ); - - $this->_model = new FeedMe_LicenseModel($attributes); - - $this->_userAgent = 'Craft/' . $version; - } - - public function getTimeout() - { - return $this->_timeout; - } - - public function getConnectTimeout() - { - return $this->_connectTimeout; - } - - public function setAllowRedirects($allowRedirects) - { - $this->_allowRedirects = $allowRedirects; - } - - public function getAllowRedirects() - { - return $this->_allowRedirects; - } - - public function getModel() - { - return $this->_model; - } - - public function setData($data) - { - $this->_model->data = $data; - } - - public function setHandle($handle) - { - $this->_model->handle = $handle; - } - - public function phoneHome($force = false) - { - if ($force) { - if (craft()->cache->get($this->etConnectFailureKey)) { - craft()->cache->delete($this->etConnectFailureKey); - } - if (craft()->cache->get($this->etRecentPhoneHome)) { - craft()->cache->delete($this->etRecentPhoneHome); - } - } - - try { - - if (!craft()->cache->get($this->etConnectFailureKey)) { - $data = $this->_model->getAttributes(null, true); - - $client = new \Guzzle\Http\Client(); - $client->setUserAgent($this->_userAgent, true); - - $options = array( - 'timeout' => $this->getTimeout(), - 'connect_timeout' => $this->getConnectTimeout(), - 'allow_redirects' => $this->getAllowRedirects(), - ); - - $request = $client->post($this->_endpoint, null, $data, $options); - - // Potentially long-running request, so close session to prevent session blocking on subsequent requests. - craft()->session->close(); - - $response = $request->send(); - - if ($response->isSuccessful()) { - - // Clear the connection failure cached item if it exists. - if (craft()->cache->get($this->etConnectFailureKey)) { - craft()->cache->delete($this->etConnectFailureKey); - } - - // Clear the connection failure cached item if it exists. - craft()->cache->set($this->etRecentPhoneHome, true, 300); - - $etModel = craft()->feedMe_license->decodeEtModel($response->getBody()); - - if ($etModel) { - return $etModel; - } else { - FeedMePlugin::log('Error in calling ' . $this->_endpoint . ' Response: ' . $response->getBody(), LogLevel::Warning); - - if (craft()->cache->get($this->etConnectFailureKey)) { - // There was an error, but at least we connected. - craft()->cache->delete($this->etConnectFailureKey); - } - } - } else { - FeedMePlugin::log('Error in calling ' . $this->_endpoint . ' Response: ' . $response->getBody(), LogLevel::Warning); - - if (craft()->cache->get($this->etConnectFailureKey)) { - // There was an error, but at least we connected. - craft()->cache->delete($this->etConnectFailureKey); - } - } - } - } // Let's log and rethrow any EtExceptions. - catch (EtException $e) { - FeedMePlugin::log('Error in ' . __METHOD__ . '. Message: ' . $e->getMessage(), LogLevel::Error); - - if (craft()->cache->get($this->etConnectFailureKey)) { - // There was an error, but at least we connected. - craft()->cache->delete($this->etConnectFailureKey); - } - - throw $e; - } catch (\Exception $e) { - FeedMePlugin::log('Error in ' . __METHOD__ . '. Message: ' . $e->getMessage(), LogLevel::Error); - - // Cache the failure for 5 minutes so we don't try again. - craft()->cache->set($this->etConnectFailureKey, true, 300); - } - - return null; - } - -} diff --git a/feedme/FeedMePlugin.php b/feedme/FeedMePlugin.php deleted file mode 100644 index eec02643..00000000 --- a/feedme/FeedMePlugin.php +++ /dev/null @@ -1,182 +0,0 @@ -getSettings()->pluginNameOverride; - - return ($pluginNameOverride) ? $pluginNameOverride : $pluginName; - } - - public function getVersion() - { - return '2.0.9'; - } - - public function getSchemaVersion() - { - return '2.0.5'; - } - - public function getDeveloper() - { - return 'Verbb'; - } - - public function getDeveloperUrl() - { - return 'https://verbb.io'; - } - - public function getPluginUrl() - { - return 'https://github.com/verbb/feed-me'; - } - - public function getDocumentationUrl() - { - return 'https://verbb.io/craft-plugins/feed-me/docs'; - } - - public function getReleaseFeedUrl() - { - return 'https://raw.githubusercontent.com/verbb/feed-me/craft-2/changelog.json'; - } - - public function hasCpSection() - { - return true; - } - - public function getSettingsUrl() - { - return 'feedme/settings'; - } - - public function registerCpRoutes() - { - return array( - 'feedme' => array('action' => 'feedMe/feeds/feedsIndex'), - 'feedme/feeds' => array('action' => 'feedMe/feeds/feedsIndex'), - 'feedme/feeds/new' => array('action' => 'feedMe/feeds/editFeed'), - 'feedme/feeds/(?P\d+)' => array('action' => 'feedMe/feeds/editFeed'), - 'feedme/feeds/map/(?P\d+)' => array('action' => 'feedMe/feeds/mapFeed'), - 'feedme/feeds/run/(?P\d+)' => array('action' => 'feedMe/feeds/runFeed'), - 'feedme/feeds/status/(?P\d+)' => array('action' => 'feedMe/feeds/statusFeed'), - 'feedme/logs' => array('action' => 'feedMe/logs/logs'), - 'feedme/settings/general' => array('action' => 'feedMe/settings'), - 'feedme/settings/license' => array('action' => 'feedMe/license/edit'), - ); - } - - protected function defineSettings() - { - return array( - 'pluginNameOverride' => AttributeType::String, - 'cache' => array(AttributeType::Number, 'default' => 60), - 'enabledTabs' => array(AttributeType::Mixed, 'default' => true), - 'edition' => array(AttributeType::Mixed), - ); - } - - public function onBeforeInstall() - { - $version = craft()->getVersion(); - - // Craft 2.6.2951 deprecated `craft()->getBuild()`, so get the version number consistently - if (version_compare(craft()->getVersion(), '2.6.2951', '<')) { - $version = craft()->getVersion() . '.' . craft()->getBuild(); - } - - // Craft 2.3.2636 fixed an issue with BaseEnum::getConstants() - if (version_compare($version, '2.3.2636', '<')) { - throw new Exception($this->getName() . ' requires Craft CMS 2.3.2636+ in order to run.'); - } - } - - public function onAfterInstall() - { - craft()->request->redirect(UrlHelper::getCpUrl('feedme/welcome')); - } - - public function init() - { - Craft::import('plugins.feedme.FeedMe.DataTypes.*'); - Craft::import('plugins.feedme.FeedMe.ElementTypes.*'); - Craft::import('plugins.feedme.FeedMe.FieldTypes.*'); - Craft::import('plugins.feedme.FeedMe.License.*'); - Craft::import('plugins.feedme.FeedMe.Helpers.*'); - - if (craft()->request->isCpRequest()) { - craft()->feedMe_license->ping(); - } - } - - - // ========================================================================= - // HOOKS - // ========================================================================= - - // Native Data Type Support - public function registerFeedMeDataTypes() - { - return array( - new AtomFeedMeDataType(), - new JsonFeedMeDataType(), - new RssFeedMeDataType(), - new XmlFeedMeDataType(), - ); - } - - // Native Element Type Support - public function registerFeedMeElementTypes() - { - if (craft()->feedMe_license->isProEdition()) { - return array( - new AssetFeedMeElementType(), - new CategoryFeedMeElementType(), - new Commerce_OrderFeedMeElementType(), - new Commerce_ProductFeedMeElementType(), - new EntryFeedMeElementType(), - new UserFeedMeElementType(), - ); - } else { - return array( - new EntryFeedMeElementType(), - ); - } - } - - // Native Field Type Support - public function registerFeedMeFieldTypes() - { - return array( - new AssetsFeedMeFieldType(), - new CategoriesFeedMeFieldType(), - new CheckboxesFeedMeFieldType(), - new Commerce_ProductsFeedMeFieldType(), - new DateFeedMeFieldType(), - new DefaultFeedMeFieldType(), - new DropdownFeedMeFieldType(), - new EntriesFeedMeFieldType(), - new LightswitchFeedMeFieldType(), - new MatrixFeedMeFieldType(), - new MultiSelectFeedMeFieldType(), - new NumberFeedMeFieldType(), - new RadioButtonsFeedMeFieldType(), - new TableFeedMeFieldType(), - new TagsFeedMeFieldType(), - new UsersFeedMeFieldType(), - ); - } - -} diff --git a/feedme/composer.json b/feedme/composer.json deleted file mode 100644 index 12e07ee6..00000000 --- a/feedme/composer.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "require": { - "cakephp/utility": "3.3.12", - "jakeasmith/http_build_url": "^1.0", - "nesbot/carbon": "^1.22" - } -} diff --git a/feedme/composer.lock b/feedme/composer.lock deleted file mode 100644 index a31c6c08..00000000 --- a/feedme/composer.lock +++ /dev/null @@ -1,266 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "content-hash": "60b9f1fe54d69e2d2fa4eb81d2127caa", - "packages": [ - { - "name": "cakephp/utility", - "version": "3.3.12", - "source": { - "type": "git", - "url": "https://github.com/cakephp/utility.git", - "reference": "88043751b4da6745761ce9cab1cf95256138d8b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/utility/zipball/88043751b4da6745761ce9cab1cf95256138d8b9", - "reference": "88043751b4da6745761ce9cab1cf95256138d8b9", - "shasum": "" - }, - "suggest": { - "ext-intl": "To use Text::transliterate() or Text::slug()" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cake\\Utility\\": "." - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "http://cakephp.org" - } - ], - "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security", - "time": "2017-01-06T13:46:45+00:00" - }, - { - "name": "jakeasmith/http_build_url", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/jakeasmith/http_build_url.git", - "reference": "93c273e77cb1edead0cf8bcf8cd2003428e74e37" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jakeasmith/http_build_url/zipball/93c273e77cb1edead0cf8bcf8cd2003428e74e37", - "reference": "93c273e77cb1edead0cf8bcf8cd2003428e74e37", - "shasum": "" - }, - "type": "library", - "autoload": { - "files": [ - "src/http_build_url.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jake A. Smith", - "email": "theman@jakeasmith.com" - } - ], - "description": "Provides functionality for http_build_url() to environments without pecl_http.", - "time": "2017-05-01T15:36:40+00:00" - }, - { - "name": "nesbot/carbon", - "version": "1.22.1", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "symfony/translation": "~2.6 || ~3.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "~4.0 || ~5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "time": "2017-01-16T07:55:07+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2016-11-14T01:06:16+00:00" - }, - { - "name": "symfony/translation", - "version": "v3.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "f4a04d2df710f81515df576b2de06bdeee518b83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f4a04d2df710f81515df576b2de06bdeee518b83", - "reference": "f4a04d2df710f81515df576b2de06bdeee518b83", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/config": "<2.8" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/intl": "^2.8.18|^3.2.5", - "symfony/yaml": "~2.8|~3.0" - }, - "suggest": { - "psr/log": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Translation Component", - "homepage": "https://symfony.com", - "time": "2017-04-12T14:13:17+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/feedme/controllers/FeedMeController.php b/feedme/controllers/FeedMeController.php deleted file mode 100644 index 2d071c80..00000000 --- a/feedme/controllers/FeedMeController.php +++ /dev/null @@ -1,29 +0,0 @@ -feedMe->getSettings(); - - $this->renderTemplate('feedme/settings/general', array( - 'settings' => $settings, - )); - } - - public function actionClearTasks() - { - // Function to clear (delete) all stuck tasks. - craft()->db->createCommand()->delete('tasks'); - - $this->redirect(craft()->request->getUrlReferrer()); - } - - -} diff --git a/feedme/controllers/FeedMe_FeedsController.php b/feedme/controllers/FeedMe_FeedsController.php deleted file mode 100644 index 97c52b74..00000000 --- a/feedme/controllers/FeedMe_FeedsController.php +++ /dev/null @@ -1,325 +0,0 @@ -feedMe_feeds->getFeeds(); - $variables['feedTypes'] = craft()->feedMe->getRegisteredDataTypesDisplayNames(); - - $this->renderTemplate('feedme/feeds/index', $variables); - } - - public function actionEditFeed(array $variables = array()) - { - if (empty($variables['feed'])) { - if (!empty($variables['feedId'])) { - $variables['feed'] = craft()->feedMe_feeds->getFeedById($variables['feedId']); - } else { - $variables['feed'] = new FeedMe_FeedModel(); - $variables['feed']->passkey = StringHelper::randomString(10); - } - } - - $variables['feedTypes'] = craft()->feedMe->getRegisteredDataTypesDisplayNames(' Feed'); - - $this->renderTemplate('feedme/feeds/_edit', $variables); - } - - public function actionMapFeed(array $variables = array()) - { - if (empty($variables['feed'])) { - $feed = craft()->feedMe_feeds->getFeedById($variables['feedId']); - $feedData = craft()->feedMe_data->getFeed($feed->feedType, $feed->feedUrl, $feed->primaryElement, $feed); - $feedRawData = craft()->feedMe_data->getFeedMapping($feedData); - - $variables['feed'] = $feed; - - if ($feedRawData) { - $variables['feedRawData'] = $feedRawData; - } - } - - $this->renderTemplate('feedme/feeds/_map', $variables); - } - - public function actionRunFeed(array $variables = array()) - { - $feed = craft()->feedMe_feeds->getFeedById($variables['feedId']); - - $variables['feed'] = $feed; - $variables['task'] = $this->_runImportTask($feed->id); - - if (craft()->request->getParam('direct')) { - // If the user triggers this from the control panel (maybe for testing), triggering a task immediately will - // lock up the browser session while it runs. In that case, we use JS to trigger the task (in _direct template) - // - // However, when triggering via Cron, run the task immediately, as Cron doesn't trigger JS (there's no browser) - // Best way to check if its being run from a non-browser, as each server is different, so can't be sure what they trigger with - $browser = $this->_getBrowserName(craft()->request->getUserAgent()); - - if ($browser === 'Other') { - $this->_runTasksAndClose(); - } - - $this->renderTemplate('feedme/feeds/_direct', $variables); - } else { - $this->redirect(craft()->request->urlReferrer); - } - } - - public function actionStatusFeed(array $variables = array()) - { - $feed = craft()->feedMe_feeds->getFeedById($variables['feedId']); - - $variables['feed'] = $feed; - - $this->renderTemplate('feedme/feeds/_status', $variables); - } - - public function actionSaveFeed() - { - $feed = $this->_getModelFromPost(); - - $this->_saveAndRedirect($feed, 'feedme/feeds/', true); - } - - public function actionSaveAndMapFeed() - { - $feed = $this->_getModelFromPost(); - - $this->_saveAndRedirect($feed, 'feedme/feeds/map/', true); - } - - public function actionSaveAndReviewFeed() - { - $feed = $this->_getModelFromPost(); - - $this->_saveAndRedirect($feed, 'feedme/feeds/status/', true); - } - - public function actionSaveAndDuplicateFeed() - { - $feed = $this->_getModelFromPost(); - - if (craft()->feedMe_feeds->saveFeed($feed)) { - craft()->feedMe_feeds->duplicateFeed($feed); - } - - craft()->userSession->setNotice(Craft::t('Feed duplicated.')); - - $this->redirect('feedme/feeds'); - } - - public function actionDeleteFeed() - { - $this->requirePostRequest(); - $this->requireAjaxRequest(); - - $feedId = craft()->request->getRequiredPost('id'); - - craft()->feedMe_feeds->deleteFeedById($feedId); - $this->returnJson(array('success' => true)); - } - - public function actionRunTask(array $variables = array()) - { - if (craft()->request->getParam('feedId')) { - $variables = array('feedId' => craft()->request->getParam('feedId')); - $this->actionRunFeed($variables); - } - } - - public function actionDebug() - { - $feedId = craft()->request->getParam('feedId'); - $limit = craft()->request->getParam('limit'); - $offset = craft()->request->getParam('offset'); - - craft()->feedMe_process->debugFeed($feedId, $limit, $offset); - craft()->end(); - } - - - - - - // Private Methods - // ========================================================================= - - private function _runImportTask($feedId) - { - $feed = craft()->feedMe_feeds->getFeedById($feedId); - - $settings = array( - 'feed' => $feed, - ); - - // If a custom URL param is provided (for direct-processing), use that instead of stored URL - if (craft()->request->getParam('direct') && craft()->request->getParam('url')) { - $feed->feedUrl = craft()->request->getParam('url'); - } - - // Are we running from the CP? - if (craft()->request->isCpRequest()) { - // Create the import task - craft()->tasks->createTask('FeedMe', $feed->name, $settings); - - // if not using the direct param for this request, do UI stuff - craft()->userSession->setNotice(Craft::t('Feed processing started.')); - - craft()->userSession->setFlash('runFeed', true); - - craft()->tasks->runPendingTasks(); - } - - // If not, are we running directly? - if (craft()->request->getParam('direct')) { - $proceed = craft()->request->getParam('passkey') == $feed['passkey']; - - // Create the import task only if provided the correct passkey - if ($proceed) { - craft()->tasks->createTask('FeedMe', $feed->name, $settings); - } - - return $proceed; - } - } - - private function _saveAndRedirect($feed, $redirect, $withId = false) - { - if (craft()->feedMe_feeds->saveFeed($feed)) { - craft()->userSession->setNotice(Craft::t('Feed saved.')); - - if ($withId) { - $redirect = $redirect . $feed->id; - } - - $this->redirect($redirect); - } else { - craft()->userSession->setError(Craft::t('Couldn’t save feed: ' . implode($feed->getAllErrors(), ' '))); - } - - craft()->urlManager->setRouteVariables(array('feed' => $feed)); - } - - private function _getModelFromPost() - { - $this->requirePostRequest(); - - if (craft()->request->getPost('feedId')) { - $feed = craft()->feedMe_feeds->getFeedById(craft()->request->getPost('feedId')); - } else { - $feed = new FeedMe_FeedModel(); - } - - $feed->name = craft()->request->getRequiredPost('name', $feed->name); - $feed->feedUrl = craft()->request->getRequiredPost('feedUrl', $feed->feedUrl); - $feed->feedType = craft()->request->getRequiredPost('feedType', $feed->feedType); - $feed->primaryElement = craft()->request->getPost('primaryElement', $feed->primaryElement); - $feed->elementType = craft()->request->getRequiredPost('elementType', $feed->elementType); - $feed->elementGroup = craft()->request->getPost('elementGroup', $feed->elementGroup); - $feed->locale = craft()->request->getPost('locale', $feed->locale); - $feed->duplicateHandle = craft()->request->getPost('duplicateHandle', $feed->duplicateHandle); - $feed->passkey = craft()->request->getRequiredPost('passkey', $feed->passkey); - $feed->backup = craft()->request->getPost('backup', $feed->backup); - - // Don't overwrite mappings when saving from first screen - if (craft()->request->getPost('fieldMapping')) { - $feed->fieldMapping = craft()->request->getPost('fieldMapping'); - } - - if (craft()->request->getPost('fieldDefaults')) { - $feed->fieldDefaults = craft()->request->getPost('fieldDefaults'); - } - - if (craft()->request->getPost('fieldElementMapping')) { - $feed->fieldElementMapping = craft()->request->getPost('fieldElementMapping'); - } - - if (craft()->request->getPost('fieldElementDefaults')) { - $feed->fieldElementDefaults = craft()->request->getPost('fieldElementDefaults'); - } - - if (craft()->request->getPost('fieldUnique')) { - $feed->fieldUnique = craft()->request->getPost('fieldUnique'); - } - - // Check conditionally on Element Group fields - depending on the Element Type selected - if (isset($feed->elementGroup[$feed->elementType])) { - $elementGroup = $feed->elementGroup[$feed->elementType]; - - if ($feed->elementType == 'Category') { - if (empty($elementGroup)) { - $feed->addError('elementGroup', Craft::t('Category Group is required')); - } - } - - if ($feed->elementType == 'Entry') { - if (empty($elementGroup['section']) || empty($elementGroup['entryType'])) { - $feed->addError('elementGroup', Craft::t('Entry Section and Type are required')); - } - } - - if ($feed->elementType == 'Commerce_Product') { - if (empty($elementGroup)) { - $feed->addError('elementGroup', Craft::t('Commerce Product Type is required')); - } - } - } - - return $feed; - } - - private function _getBrowserName($user_agent) - { - if (strpos($user_agent, 'Opera') || strpos($user_agent, 'OPR/')) return 'Opera'; - elseif (strpos($user_agent, 'Edge')) return 'Edge'; - elseif (strpos($user_agent, 'Chrome')) return 'Chrome'; - elseif (strpos($user_agent, 'Safari')) return 'Safari'; - elseif (strpos($user_agent, 'Firefox')) return 'Firefox'; - elseif (strpos($user_agent, 'MSIE') || strpos($user_agent, 'Trident/7')) return 'Internet Explorer'; - - return 'Other'; - } - - /** - * Runs any pending tasks then ends the request. - * - * @see TasksController::actionRunPendingTasks() - */ - private function _runTasksAndClose() - { - // Make sure tasks aren't already running - if (!craft()->tasks->isTaskRunning()) - { - // Is there a pending task? - $task = craft()->tasks->getNextPendingTask(); - - if ($task) - { - // Attempt to close the connection if this is an Ajax request - if (craft()->request->isAjaxRequest()) - { - craft()->request->close('1'); - } - - // Start running tasks - craft()->tasks->runPendingTasks(); - } - } - - craft()->end(); - } - -} diff --git a/feedme/controllers/FeedMe_HelpController.php b/feedme/controllers/FeedMe_HelpController.php deleted file mode 100644 index aa4ce454..00000000 --- a/feedme/controllers/FeedMe_HelpController.php +++ /dev/null @@ -1,368 +0,0 @@ -requirePostRequest(); - - craft()->config->maxPowerCaptain(); - - $success = false; - $errors = array(); - $zipFile = null; - $tempFolder = null; - - $getHelpModel = new FeedMe_GetHelpModel(); - $getHelpModel->fromEmail = craft()->request->getPost('fromEmail'); - $getHelpModel->feedIssue = craft()->request->getPost('feedIssue'); - $getHelpModel->message = trim(craft()->request->getPost('message')); - $getHelpModel->attachLogs = (bool) craft()->request->getPost('attachLogs'); - $getHelpModel->attachSettings = (bool) craft()->request->getPost('attachSettings'); - $getHelpModel->attachFeed = (bool) craft()->request->getPost('attachFeed'); - $getHelpModel->attachFields = (bool) craft()->request->getPost('attachFields'); - $getHelpModel->attachment = UploadedFile::getInstanceByName('attachAdditionalFile'); - - if ($getHelpModel->validate()) { - $plugin = craft()->plugins->getPlugin('feedMe'); - $feed = craft()->feedMe_feeds->getFeedById($getHelpModel->feedIssue); - - // Cater for pre-Craft 2.6.2951 - if (version_compare(craft()->getVersion(), '2.6.2951', '<')) { - $version = craft()->getVersion() . '.' . craft()->getBuild(); - } else { - $version = craft()->getVersion(); - } - - // Add some extra info about this install - $message = $getHelpModel->message . "\n\n" . - "------------------------------\n\n" . - 'Craft '.craft()->getEditionName().' '.$version . "\n\n" . - 'Feed Me '.$plugin->getVersion() . "\n\n" . - 'License Key: '.craft()->feedMe_license->getLicenseKey(); - - try { - $zipFile = $this->_createZip(); - - $tempFolder = craft()->path->getTempPath().StringHelper::UUID().'/'; - - if (!IOHelper::folderExists($tempFolder)) { - IOHelper::createFolder($tempFolder); - } - - - // - // Attached just the Feed Me log - // - if ($getHelpModel->attachLogs) { - if (IOHelper::folderExists(craft()->path->getLogPath())) { - $logFolderContents = IOHelper::getFolderContents(craft()->path->getLogPath()); - - foreach ($logFolderContents as $file) { - - // Just grab the Feed Me log - if (IOHelper::fileExists($file) && basename($file) == 'feedme.log') { - Zip::add($zipFile, $file, craft()->path->getStoragePath()); - } - } - } - } - - // - // Backup our feed settings - // - if ($getHelpModel->attachSettings) { - if (IOHelper::folderExists(craft()->path->getDbBackupPath())) { - $backup = craft()->path->getDbBackupPath().StringHelper::toLowerCase('feedme_'.gmdate('ymd_His').'.sql'); - - $feedInfo = $this->_prepareSqlFeedSettings($getHelpModel->feedIssue); - - IOHelper::writeToFile($backup, $feedInfo . PHP_EOL, true, true); - - Zip::add($zipFile, $backup, craft()->path->getStoragePath()); - } - } - - // - // Save the contents of the feed - // - if ($getHelpModel->attachFeed) { - // Check for and environment variables in url - $url = craft()->config->parseEnvironmentString($feed->feedUrl); - - $feedData = craft()->feedMe_data->getRawData($url); - - $tempFile = $tempFolder.'feed.'.StringHelper::toLowerCase($feed->feedType); - - IOHelper::writeToFile($tempFile, $feedData . PHP_EOL, true, true); - - if (IOHelper::fileExists($tempFile)) { - Zip::add($zipFile, $tempFile, $tempFolder); - } - } - - // - // Get some information about the fields we're mapping to - handy to know - // - if ($getHelpModel->attachFields) { - $fieldInfo = array(); - - foreach ($feed->fieldMapping as $fieldHandle => $feedHandle) { - if ($fieldHandle && !is_array($fieldHandle)) { - // Check for sub-fields and options - $fieldHandleInfo = explode('-', $fieldHandle); - $fieldHandle = $fieldHandleInfo[0]; - - $field = craft()->fields->getFieldByHandle($fieldHandle); - - if ($field && !isset($fieldInfo[$field->handle])) { - $fieldInfo[$field->handle] = $this->_prepareExportField($field); - } - } - } - - // Strip field handles in array - we don't need them an easier to import into FM - $fieldInfo = array_values($fieldInfo); - - // Support PHP <5.4, JSON_PRETTY_PRINT = 128, JSON_NUMERIC_CHECK = 32 - $json = json_encode($fieldInfo, 128 | 32); - - $tempFile = $tempFolder.'fields.json'; - - IOHelper::writeToFile($tempFile, $json . PHP_EOL, true, true); - - if (IOHelper::fileExists($tempFile)) { - Zip::add($zipFile, $tempFile, $tempFolder); - } - } - - - // - // Add in any additional attachments - // - if ($getHelpModel->attachment) { - $tempFile = $tempFolder.$getHelpModel->attachment->getName(); - $getHelpModel->attachment->saveAs($tempFile); - - // Make sure it actually saved. - if (IOHelper::fileExists($tempFile)) { - Zip::add($zipFile, $tempFile, $tempFolder); - } - } - } catch(\Exception $e) { - FeedMePlugin::log('Tried to attach debug logs to a support request and something went horribly wrong: '.$e->getMessage(), LogLevel::Warning, true); - } - - $email = new EmailModel(); - $email->fromEmail = $getHelpModel->fromEmail; - $email->toEmail = "support@verbb.io"; - $email->subject = "Feed Me Support"; - $email->body = $message; - - if ($zipFile) { - $email->addAttachment($zipFile, 'FeedMeSupportAttachment.zip', 'base64', 'application/zip'); - } - - $result = craft()->email->sendEmail($email); - - if ($result) { - if ($zipFile) { - if (IOHelper::fileExists($zipFile)) { - IOHelper::deleteFile($zipFile); - } - } - - if ($tempFolder) { - IOHelper::clearFolder($tempFolder); - IOHelper::deleteFolder($tempFolder); - } - - $success = true; - } else { - $errors = array('Support' => array('Unable to contact support. Please try again soon.')); - } - } else { - $errors = $getHelpModel->getErrors(); - } - - $this->renderTemplate('feedMe/help/response', array( - 'success' => $success, - 'errors' => JsonHelper::encode($errors), - 'widgetId' => 'feedMeHelp', - )); - } - - - - - - - - // Private Methods - // ========================================================================= - - private function _createZip() - { - $zipFile = craft()->path->getTempPath().StringHelper::UUID().'.zip'; - IOHelper::createFile($zipFile); - - return $zipFile; - } - - private function _prepareSqlFeedSettings($id) - { - if (($tablePrefix = craft()->config->get('tablePrefix', ConfigFile::Db)) !== '') { - $tableName = craft()->config->get('tablePrefix', ConfigFile::Db) . '_feedme_feeds'; - } else { - $tableName = 'feedme_feeds'; - } - - $row = craft()->db->createCommand('SELECT * FROM ' . craft()->db->quoteTableName($tableName) . ' WHERE id = ' . $id . ';')->queryRow(); - - foreach ($row as $columnName => $value) { - if ($value === null) { - $row[$columnName] = 'NULL'; - } else { - $row[$columnName] = craft()->db->getPdoInstance()->quote($value); - } - } - - $attrs = array_map(array(craft()->db, 'quoteColumnName'), array_keys($row)); - $insertStatement = 'INSERT INTO ' . craft()->db->quoteTableName($tableName) . ' (' . implode(', ', $attrs) . ') VALUES ' . PHP_EOL; - $insertStatement .= '('.implode(', ', $row).');'; - - return $insertStatement; - } - - private function _prepareExportField($field) - { - $newField = array( - 'name' => $field->name, - 'handle' => $field->handle, - 'instructions' => $field->instructions, - 'required' => $field->required, - 'translatable' => $field->translatable, - 'type' => $field->type, - 'settings' => $field->settings, - ); - - if ($field->type == 'Matrix') { - $newField['settings'] = $this->_prepareExportMatrixField($field); - } - - if ($field->type == 'SuperTable') { - $newField['settings'] = $this->_prepareExportSuperTableField($field); - } - - // Position Select - you sly dog! - if ($field->type == 'PositionSelect') { - $newField['settings'] = $this->_prepareExportPositionSelectField($field); - } - - return $newField; - } - - public function _prepareExportMatrixField($field) - { - $fieldSettings = $field->settings; - - $blockTypes = craft()->matrix->getBlockTypesByFieldId($field->id); - - $blockCount = 1; - foreach ($blockTypes as $blockType) { - $fieldSettings['blockTypes']['new' . $blockCount] = array( - 'name' => $blockType->name, - 'handle' => $blockType->handle, - 'fields' => array(), - ); - - $fieldCount = 1; - foreach ($blockType->fields as $blockField) { - // Case for nested Super Table - if ($blockField->type == 'SuperTable') { - $settings = $this->_prepareExportSuperTableField($blockField); - } else if ($blockField->type == 'PositionSelect') { - $settings = $this->_prepareExportPositionSelectField($blockField); - } else { - $settings = $blockField->settings; - } - - $fieldSettings['blockTypes']['new' . $blockCount]['fields']['new' . $fieldCount] = array( - 'name' => $blockField->name, - 'handle' => $blockField->handle, - 'required' => $blockField->required, - 'instructions' => $blockField->instructions, - 'translatable' => $blockField->translatable, - 'type' => $blockField->type, - 'typesettings' => $settings, - ); - - $fieldCount++; - } - - $blockCount++; - } - - return $fieldSettings; - } - - public function _prepareExportSuperTableField($field) - { - $fieldSettings = $field->settings; - - $blockTypes = craft()->superTable->getBlockTypesByFieldId($field->id); - - $blockCount = 1; - foreach ($blockTypes as $blockType) { - $fieldSettings['blockTypes']['new' . $blockCount] = array( - 'fields' => array(), - ); - - $fieldCount = 1; - foreach ($blockType->fields as $blockField) { - // Case for nested Matrix - if ($blockField->type == 'Matrix') { - $settings = $this->_prepareExportMatrixField($blockField); - } else if ($blockField->type == 'PositionSelect') { - $settings = $this->_prepareExportPositionSelectField($blockField); - } else { - $settings = $blockField->settings; - } - - $fieldSettings['blockTypes']['new' . $blockCount]['fields']['new' . $fieldCount] = array( - 'name' => $blockField->name, - 'handle' => $blockField->handle, - 'required' => $blockField->required, - 'instructions' => $blockField->instructions, - 'translatable' => $blockField->translatable, - 'type' => $blockField->type, - 'typesettings' => $settings, - ); - - $fieldCount++; - } - - $blockCount++; - } - - return $fieldSettings; - } - - public function _prepareExportPositionSelectField($field) - { - $fieldSettings = $field->settings; - $options = array(); - - foreach ($fieldSettings['options'] as $value) { - $options[$value] = true; - } - - $fieldSettings['options'] = $options; - - return $fieldSettings; - } -} diff --git a/feedme/controllers/FeedMe_LicenseController.php b/feedme/controllers/FeedMe_LicenseController.php deleted file mode 100644 index 9dbc7147..00000000 --- a/feedme/controllers/FeedMe_LicenseController.php +++ /dev/null @@ -1,87 +0,0 @@ -feedMe_license->getLicenseKey(); - - $this->renderTemplate('feedme/settings/license', [ - 'hasLicenseKey' => ($licenseKey !== null) - ]); - } - - public function actionGetLicenseInfo() - { - $this->requirePostRequest(); - $this->requireAjaxRequest(); - - return $this->_sendResponse(craft()->feedMe_license->getLicenseInfo()); - } - - public function actionUnregister() - { - $this->requirePostRequest(); - $this->requireAjaxRequest(); - - return $this->_sendResponse(craft()->feedMe_license->unregisterLicenseKey()); - } - - public function actionTransfer() - { - $this->requirePostRequest(); - $this->requireAjaxRequest(); - - return $this->_sendResponse(craft()->feedMe_license->transferLicenseKey()); - } - - public function actionUpdateLicenseKey() - { - $this->requirePostRequest(); - $this->requireAjaxRequest(); - - $licenseKey = craft()->request->getRequiredPost('licenseKey'); - - // Are we registering a new license key? - if ($licenseKey) { - // Record the license key locally - try { - craft()->feedMe_license->setLicenseKey($licenseKey); - } catch (InvalidLicenseKeyException $e) { - $this->returnErrorJson(Craft::t('The license key is invalid.')); - } - - return $this->_sendResponse(craft()->feedMe_license->registerPlugin($licenseKey)); - } else { - // Just clear our record of the license key - craft()->feedMe_license->setLicenseKey(null); - craft()->feedMe_license->setLicenseKeyStatus(LicenseKeyStatus::Unknown); - return $this->_sendResponse(); - - } - } - - - // Private Methods - // ========================================================================= - - private function _sendResponse($success = true) - { - if ($success) { - $this->returnJson(array( - 'success' => true, - 'licenseKey' => craft()->feedMe_license->getLicenseKey(), - 'licenseKeyStatus' => craft()->plugins->getPluginLicenseKeyStatus('FeedMe'), - )); - } else { - //$this->returnErrorJson(craft()->feedMe_license->error); - $this->returnErrorJson(Craft::t('An unknown error occurred.')); - } - } - -} diff --git a/feedme/controllers/FeedMe_LogsController.php b/feedme/controllers/FeedMe_LogsController.php deleted file mode 100644 index 31154a04..00000000 --- a/feedme/controllers/FeedMe_LogsController.php +++ /dev/null @@ -1,77 +0,0 @@ -config->maxPowerCaptain(); - - if (IOHelper::folderExists(craft()->path->getLogPath())) { - $dateTimePattern = '/^[0-9]{4}\/[0-9]{2}\/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/'; - - $logEntries = array(); - - $currentFullPath = craft()->path->getLogPath().$this->_currentLogFileName; - - if (IOHelper::fileExists($currentFullPath)) { - // Split the log file's contents up into arrays of individual logs, where each item is an array of - // the lines of that log. - $contents = IOHelper::getFileContents(craft()->path->getLogPath().$this->_currentLogFileName); - - $requests = explode('******************************************************************************************************', $contents); - - foreach ($requests as $request) { - $logChunks = preg_split('/^(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}) \[(.*?)\] \[(.*?)\] /m', $request, null, PREG_SPLIT_DELIM_CAPTURE); - - // Ignore the first chunk - array_shift($logChunks); - - // Loop through them - $totalChunks = count($logChunks); - - for ($i = 0; $i < $totalChunks; $i += 4) { - $logEntryModel = new LogEntryModel(); - - $logEntryModel->dateTime = DateTime::createFromFormat('Y/m/d H:i:s', $logChunks[$i]); - $logEntryModel->level = $logChunks[$i+1]; - $logEntryModel->category = $logChunks[$i+2]; - - $message = $logChunks[$i+3]; - $rowContents = explode("\n", $message); - - // This is a non-devMode log entry. - $logEntryModel->message = str_replace('[Forced]', '', $rowContents[0]); - - // And save the log entry. - $logEntries[] = $logEntryModel; - } - } - } - - // Put these logs at the top - $logEntries = array_reverse($logEntries); - - $this->renderTemplate('feedme/logs/index', array( - 'logEntries' => $logEntries, - )); - } - } - - public function actionClear() - { - $currentFullPath = craft()->path->getLogPath() . $this->_currentLogFileName; - IOHelper::deleteFile($currentFullPath, true); - - craft()->request->redirect(craft()->request->urlReferrer); - } -} diff --git a/feedme/migrations/m150305_144609_feedMe_useEnumsForFeedSettings.php b/feedme/migrations/m150305_144609_feedMe_useEnumsForFeedSettings.php deleted file mode 100644 index c1d5d912..00000000 --- a/feedme/migrations/m150305_144609_feedMe_useEnumsForFeedSettings.php +++ /dev/null @@ -1,30 +0,0 @@ -db->createCommand()->alterColumn('feedme_feeds', 'duplicateHandle', array( - 'values' => array( - FeedMe_Duplicate::Add, - FeedMe_Duplicate::Update, - FeedMe_Duplicate::Delete, - ), - 'column' => 'enum' - )); - - craft()->db->createCommand()->alterColumn('feedme_feeds', 'feedType', array( - 'values' => array( - FeedMe_FeedType::XML, - FeedMe_FeedType::RSS, - FeedMe_FeedType::ATOM, - FeedMe_FeedType::JSON, - ), - 'column' => 'enum' - )); - - return true; - } -} diff --git a/feedme/migrations/m150425_144612_feedMe_addPasskey.php b/feedme/migrations/m150425_144612_feedMe_addPasskey.php deleted file mode 100644 index 4b75f747..00000000 --- a/feedme/migrations/m150425_144612_feedMe_addPasskey.php +++ /dev/null @@ -1,26 +0,0 @@ -db->createCommand()->addColumnAfter('feedme_feeds', 'passkey', ColumnType::Varchar, 'fieldUnique'); - - // populate any existing feed with new passkeys - $feeds = craft()->db->createCommand()->select('*')->from('feedme_feeds')->queryAll(); - - foreach ($feeds as $feed) { - $data = array('passkey' => $this->generateRandomString(10)); - - craft()->db->createCommand()->update('feedme_feeds', $data, 'id = :id', array(':id' => $feed['id'])); - } - - return true; - } - - public static function generateRandomString($length = 5) - { - return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length); - } -} diff --git a/feedme/migrations/m150503_144613_feedMe_allowPrimaryElementNull.php b/feedme/migrations/m150503_144613_feedMe_allowPrimaryElementNull.php deleted file mode 100644 index eb7a7c1f..00000000 --- a/feedme/migrations/m150503_144613_feedMe_allowPrimaryElementNull.php +++ /dev/null @@ -1,15 +0,0 @@ -db->createCommand()->alterColumn('feedme_feeds', 'primaryElement', array( - 'column' => ColumnType::Varchar, - 'null' => true - )); - - return true; - } -} diff --git a/feedme/migrations/m150517_144614_feedMe_addBackupOption.php b/feedme/migrations/m150517_144614_feedMe_addBackupOption.php deleted file mode 100644 index 41d1a3e6..00000000 --- a/feedme/migrations/m150517_144614_feedMe_addBackupOption.php +++ /dev/null @@ -1,21 +0,0 @@ -db->createCommand()->addColumnAfter('feedme_feeds', 'backup', ColumnType::Bool, 'passkey'); - - // populate any existing feed with backup = true - $feeds = craft()->db->createCommand()->select('*')->from('feedme_feeds')->queryAll(); - - foreach ($feeds as $feed) { - $data = array('backup' => true); - - craft()->db->createCommand()->update('feedme_feeds', $data, 'id = :id', array(':id' => $feed['id'])); - } - - return true; - } -} diff --git a/feedme/migrations/m160222_000000_feedMe_addLocale.php b/feedme/migrations/m160222_000000_feedMe_addLocale.php deleted file mode 100644 index 176745f7..00000000 --- a/feedme/migrations/m160222_000000_feedMe_addLocale.php +++ /dev/null @@ -1,12 +0,0 @@ -db->createCommand()->addColumnAfter('feedme_feeds', 'locale', ColumnType::Varchar, 'entrytype'); - - return true; - } -} diff --git a/feedme/migrations/m160414_000000_feedMe_urlTextColumn.php b/feedme/migrations/m160414_000000_feedMe_urlTextColumn.php deleted file mode 100644 index 1ece015d..00000000 --- a/feedme/migrations/m160414_000000_feedMe_urlTextColumn.php +++ /dev/null @@ -1,12 +0,0 @@ -db->createCommand()->alterColumn('feedme_feeds', 'feedUrl', ColumnType::Text); - - return true; - } -} diff --git a/feedme/migrations/m161101_000000_feedMe_version2.php b/feedme/migrations/m161101_000000_feedMe_version2.php deleted file mode 100644 index 75612c56..00000000 --- a/feedme/migrations/m161101_000000_feedMe_version2.php +++ /dev/null @@ -1,123 +0,0 @@ -dbConnection->schema->getTable('{{feedme_feeds}}'); - - if (!craft()->db->columnExists('feedme_feeds', 'elementType')) { - craft()->db->createCommand()->addColumnAfter('feedme_feeds', 'elementType', ColumnType::Varchar, 'primaryElement'); - } - - if (!craft()->db->columnExists('feedme_feeds', 'elementGroup')) { - craft()->db->createCommand()->addColumnAfter('feedme_feeds', 'elementGroup', ColumnType::Text, 'primaryElement'); - } - - if (!craft()->db->columnExists('feedme_feeds', 'fieldDefaults')) { - craft()->db->createCommand()->addColumnAfter('feedme_feeds', 'fieldDefaults', ColumnType::Text, 'fieldMapping'); - } - - if (!craft()->db->columnExists('feedme_feeds', 'fieldElementMapping')) { - craft()->db->createCommand()->addColumnAfter('feedme_feeds', 'fieldElementMapping', ColumnType::Text, 'fieldMapping'); - } - - if (!craft()->db->columnExists('feedme_feeds', 'fieldElementDefaults')) { - craft()->db->createCommand()->addColumnAfter('feedme_feeds', 'fieldElementDefaults', ColumnType::Text, 'fieldMapping'); - } - - - // Remove logging tables - if (craft()->db->tableExists('feedme_logs')) { - craft()->db->createCommand('SET FOREIGN_KEY_CHECKS = 0;')->execute(); - craft()->db->createCommand()->dropTable('feedme_logs'); - craft()->db->createCommand('SET FOREIGN_KEY_CHECKS = 1;')->execute(); - } - - if (craft()->db->tableExists('feedme_log')) { - craft()->db->createCommand('SET FOREIGN_KEY_CHECKS = 0;')->execute(); - craft()->db->createCommand()->dropTable('feedme_log'); - craft()->db->createCommand('SET FOREIGN_KEY_CHECKS = 1;')->execute(); - } - - // Grab current feedme data - $currentData = craft()->db->createCommand() - ->select('*') - ->from('feedme_feeds') - ->queryAll(); - - // Move Section/EntryType IDs into ElementGroup column - craft()->db->createCommand()->update('feedme_feeds', array('elementType' => 'Entry')); - - foreach ($currentData as $data) { - if (isset($data['section']) && isset($data['entrytype'])) { - $elementGroup = array( - 'Category' => '', - 'Entry' => array( - 'section' => $data['section'], - 'entryType' => $data['entrytype'], - ), - 'Commerce_Product' => '', - 'User' => '', - ); - - craft()->db->createCommand()->update('feedme_feeds', array('elementGroup' => json_encode($elementGroup)), 'id = ' . $data['id']); - } - } - - // Delete old columns - if ($table->getColumn('section') !== null) { - $this->dropColumn('feedme_feeds', 'section'); - } - if ($table->getColumn('entrytype') !== null) { - $this->dropColumn('feedme_feeds', 'entrytype'); - } - - // Loop through existing mapping - reverse values and keys - foreach ($currentData as $data) { - $newMapping = array(); - - $fieldMapping = json_decode($data['fieldMapping'], true); - - if ($fieldMapping) { - foreach ($fieldMapping as $feedHandle => $handle) { - $newFieldHandle = $handle; - - if (preg_match('/^(.*)\[(.*)]$/', $newFieldHandle, $matches)) { - $fieldHandle = $matches[1]; - $subfieldHandle = $matches[2]; - - $newFieldHandle = $fieldHandle . '--' . $subfieldHandle; - } - - $newMapping[$newFieldHandle] = $feedHandle; - } - } - - craft()->db->createCommand()->update('feedme_feeds', array('fieldMapping' => json_encode($newMapping)), 'id = ' . $data['id']); - } - - // Loop through the Unique fields - a little trickier due to now using field handles over feed handles - foreach ($currentData as $data) { - $newMapping = array(); - - $fieldMapping = json_decode($data['fieldMapping'], true); - $fieldUnique = json_decode($data['fieldUnique'], true); - - if ($fieldUnique) { - foreach ($fieldUnique as $feedHandle => $isUnique) { - if (isset($fieldMapping[$feedHandle])) { - $handle = $fieldMapping[$feedHandle]; - - $newMapping[$handle] = $isUnique; - } - } - } - - craft()->db->createCommand()->update('feedme_feeds', array('fieldUnique' => json_encode($newMapping)), 'id = ' . $data['id']); - } - - return true; - } -} diff --git a/feedme/migrations/m170129_000000_feedMe_changeImportStrategy.php b/feedme/migrations/m170129_000000_feedMe_changeImportStrategy.php deleted file mode 100644 index bfe7923c..00000000 --- a/feedme/migrations/m170129_000000_feedMe_changeImportStrategy.php +++ /dev/null @@ -1,40 +0,0 @@ -dbConnection->schema->getTable('{{feedme_feeds}}'); - - // Change the Duplication Handling column from Enum to Text - craft()->db->createCommand()->alterColumn('feedme_feeds', 'duplicateHandle', ColumnType::Text); - - // Now, as each column will have a single string value, we turn that into an array - $currentData = craft()->db->createCommand() - ->select('*') - ->from('feedme_feeds') - ->queryAll(); - - foreach ($currentData as $data) { - $duplicateHandle = array($data['duplicateHandle']); - - // But - we want to ensure backward compatibility: - // add = Add - // update = Add + Update - // delete = Add + Update + Delete - if ($data['duplicateHandle'] == 'update') { - $duplicateHandle[] = 'add'; - } - - if ($data['duplicateHandle'] == 'delete') { - $duplicateHandle[] = 'add'; - $duplicateHandle[] = 'update'; - } - - craft()->db->createCommand()->update('feedme_feeds', array('duplicateHandle' => json_encode($duplicateHandle)), 'id = ' . $data['id']); - } - - return true; - } -} diff --git a/feedme/migrations/m170330_000000_feedMe_supportCustomDataTypes.php b/feedme/migrations/m170330_000000_feedMe_supportCustomDataTypes.php deleted file mode 100644 index 969f01e5..00000000 --- a/feedme/migrations/m170330_000000_feedMe_supportCustomDataTypes.php +++ /dev/null @@ -1,11 +0,0 @@ -db->createCommand()->alterColumn('feedme_feeds', 'feedType', ColumnType::Varchar); - return true; - } -} \ No newline at end of file diff --git a/feedme/migrations/m170516_000000_feedMe_refactorFieldMapping.php b/feedme/migrations/m170516_000000_feedMe_refactorFieldMapping.php deleted file mode 100644 index 82ea4ff6..00000000 --- a/feedme/migrations/m170516_000000_feedMe_refactorFieldMapping.php +++ /dev/null @@ -1,33 +0,0 @@ -dbConnection->schema->getTable('{{feedme_feeds}}'); - - // Change any field-mapping to remove `[]` and `/.../` - $currentData = craft()->db->createCommand() - ->select('*') - ->from('feedme_feeds') - ->queryAll(); - - foreach ($currentData as $data) { - $fieldMapping = json_decode($data['fieldMapping'], true); - - if (!is_array($fieldMapping)) { - continue; - } - - foreach ($fieldMapping as $key => $value) { - $value = str_replace('/.../', '/', $value); - $value = str_replace('[]', '', $value); - } - - craft()->db->createCommand()->update('feedme_feeds', array('fieldMapping' => json_encode($fieldMapping)), 'id = ' . $data['id']); - } - - return true; - } -} diff --git a/feedme/models/FeedMe_FeedModel.php b/feedme/models/FeedMe_FeedModel.php deleted file mode 100644 index b5f36594..00000000 --- a/feedme/models/FeedMe_FeedModel.php +++ /dev/null @@ -1,46 +0,0 @@ -name); - } - - public function getDuplicateHandleFriendly() - { - return FeedMeDuplicate::getFrieldly($this->duplicateHandle); - } - - // Protected Methods - // ========================================================================= - - protected function defineAttributes() - { - return array( - 'id' => AttributeType::Number, - 'name' => AttributeType::String, - 'feedUrl' => AttributeType::Uri, - 'feedType' => AttributeType::String, - 'primaryElement' => AttributeType::String, - 'elementType' => AttributeType::String, - 'elementGroup' => AttributeType::Mixed, - 'locale' => AttributeType::String, - 'duplicateHandle' => AttributeType::Mixed, - 'fieldMapping' => AttributeType::Mixed, - 'fieldDefaults' => AttributeType::Mixed, - 'fieldElementMapping' => AttributeType::Mixed, - 'fieldElementDefaults' => AttributeType::Mixed, - 'fieldUnique' => AttributeType::Mixed, - 'passkey' => AttributeType::String, - 'backup' => AttributeType::Bool, - ); - } -} - - - \ No newline at end of file diff --git a/feedme/models/FeedMe_GetHelpModel.php b/feedme/models/FeedMe_GetHelpModel.php deleted file mode 100644 index 71024777..00000000 --- a/feedme/models/FeedMe_GetHelpModel.php +++ /dev/null @@ -1,33 +0,0 @@ - 3145728, 'allowEmpty' => true), - )); - } - - // Protected Methods - // ========================================================================= - - protected function defineAttributes() - { - return array( - 'fromEmail' => array(AttributeType::Email, 'required' => true, 'label' => 'Your Email'), - 'feedIssue' => array(AttributeType::String, 'required' => true), - 'message' => array(AttributeType::String, 'required' => true), - 'attachLogs' => AttributeType::Bool, - 'attachSettings' => AttributeType::Bool, - 'attachFeed' => AttributeType::Bool, - 'attachFields' => AttributeType::Bool, - 'attachment' => AttributeType::Mixed, - ); - } -} diff --git a/feedme/models/FeedMe_LicenseModel.php b/feedme/models/FeedMe_LicenseModel.php deleted file mode 100644 index d78f7b62..00000000 --- a/feedme/models/FeedMe_LicenseModel.php +++ /dev/null @@ -1,40 +0,0 @@ - array(AttributeType::String), - 'requestIp' => array(AttributeType::String), - 'requestTime' => array(AttributeType::String), - 'requestPort' => array(AttributeType::String), - - 'craftBuild' => array(AttributeType::String), - 'craftVersion' => array(AttributeType::String), - 'craftEdition' => array(AttributeType::String), - 'craftTrack' => array(AttributeType::String), - 'userEmail' => array(AttributeType::String), - - 'licenseKey' => array(AttributeType::String), - 'licensedEdition' => array(AttributeType::String), - 'requestProduct' => array(AttributeType::String), - 'requestVersion' => array(AttributeType::String), - 'data' => array(AttributeType::Mixed), - 'errors' => array(AttributeType::Mixed), - ); - } -} diff --git a/feedme/records/FeedMe_FeedRecord.php b/feedme/records/FeedMe_FeedRecord.php deleted file mode 100644 index 5f593bc6..00000000 --- a/feedme/records/FeedMe_FeedRecord.php +++ /dev/null @@ -1,41 +0,0 @@ - array(AttributeType::String, 'required' => true), - 'feedUrl' => array(AttributeType::Uri, 'required' => true, 'column' => ColumnType::Text), - 'feedType' => array(AttributeType::String, 'required' => true), - 'primaryElement' => array(AttributeType::String), - 'elementType' => array(AttributeType::String, 'required' => true), - 'elementGroup' => array(AttributeType::Mixed), - 'locale' => array(AttributeType::String), - 'duplicateHandle' => array(AttributeType::Mixed, 'required' => true), - 'fieldMapping' => AttributeType::Mixed, - 'fieldDefaults' => AttributeType::Mixed, - 'fieldElementMapping' => AttributeType::Mixed, - 'fieldElementDefaults' => AttributeType::Mixed, - 'fieldUnique' => AttributeType::Mixed, - 'passkey' => array(AttributeType::String, 'required' => true), - 'backup' => AttributeType::Bool, - ); - } - - public function scopes() - { - return array( - 'ordered' => array('order' => 'name'), - ); - } -} - - - diff --git a/feedme/resources/css/FeedMe.css b/feedme/resources/css/FeedMe.css deleted file mode 100644 index 5fbd451a..00000000 --- a/feedme/resources/css/FeedMe.css +++ /dev/null @@ -1,496 +0,0 @@ - - -/* ========================================================================== -// Feeds Index -// ========================================================================== */ - -.fa { - vertical-align: middle; -} - -.fa-icon.direct .fa-external-link, -.fa-icon .fa-info-circle, -.fa-icon.debug .fa-bug { - color: rgba(0, 0, 0, 0.2); -} - -.fa-icon.direct:hover .fa-external-link, -.fa-icon:hover .fa-info-circle, -.fa-icon.debug:hover .fa-bug { - color: #0d78f2; -} - -body.ltr #feeds .thin.action { - padding-left: 10px; -} - -table#feeds .element-group-sub { - display: block; - font-size: 11px; - line-height: 1.2; - color: rgba(51, 63, 77, 0.5); - font-weight: bold; -} - - - - -/* ========================================================================== -// Field-Mapping Step -// ========================================================================== */ - -.feedme-mapping th:nth-child(1) { - width: 30%; -} - -.feedme-mapping th:nth-child(2) { - width: 40%; -} - -.feedme-mapping th:nth-child(3) { - width: 30%; -} - -.feedme-mapping td.col-map .field .heading { - font-size: 11px; -} - -.feedme-mapping td.col-map .field { - margin: 10px 0; -} - -.feedme-mapping td.col-field .field > .heading { - font-size: 12px; - margin-bottom: 0; -} - - -/* Selectize */ -/*.feedme-mapping .select:before { - content: ''; - background: url(/cpresources/images/spinner_element.gif) no-repeat; - background-size: contain; - width: 16px; - height: 16px; - position: absolute; - top: calc(50% - 8px); - right: 5px; -}*/ - -.feedme-mapping .select:after { - display: none; -} - -.feedme-mapping .select select { - opacity: 0; - display: block !important; -} - -.feedme-mapping .select select.selectized { - position: absolute; - z-index: -1; -} - -.feedme-mapping .selectize-input { - padding: 6px 22px 5px 10px; - border: 1px solid #e3e5e8; - border-radius: 3px; - overflow: visible; - - background-image: -webkit-linear-gradient(#fff, #fafafa); - background-image: -moz-linear-gradient(#fff, #fafafa); - background-image: -ms-linear-gradient(#fff, #fafafa); - background-image: -o-linear-gradient(#fff, #fafafa); - background-image: linear-gradient(#fff, #fafafa); - - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.feedme-mapping .selectize-input.focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.feedme-mapping .selectize-input input { - position: relative !important; -} - -.feedme-mapping .selectize-control.single .selectize-input:after { - font-family: 'Craft'; - speak: none; - -webkit-font-feature-settings: "liga", "dlig"; - -moz-font-feature-settings: "liga=1, dlig=1"; - -moz-font-feature-settings: "liga", "dlig"; - -ms-font-feature-settings: "liga", "dlig"; - -o-font-feature-settings: "liga", "dlig"; - font-feature-settings: "liga", "dlig"; - text-rendering: optimizeLegibility; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - direction: ltr; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - display: inline-block; - text-align: center; - font-style: normal; - vertical-align: middle; - word-wrap: normal !important; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - position: absolute; - z-index: 1; - top: calc(50% - 5px); - font-size: 10px; - content: '▼'; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - pointer-events: none; - - margin: 0 !important; - border: none; -} - -.feedme-mapping .selectize-input div[data-value="noimport"] { - color: #b9bfc6; -} - -.feedme-mapping .selectize-dropdown [data-selectable], -.feedme-mapping .selectize-dropdown .optgroup-header { - padding: 3px 10px; - font-size: 12px; -} - -.feedme-mapping .selectize-dropdown-content { - max-height: 600px; -} - -.feedme-mapping td.col-map > .field .input .select { - display: block; -} - - -.feedme-mapping .field-extra-settings { - font-size: 11px; -} - -.feedme-mapping .field-extra-settings input.checkbox + label:before, -.feedme-mapping .field-extra-settings div.checkbox:before { - top: 0; -} - - -.feedme-mapping .field-extra-settings .assets-uploads .asset-label-hide { - visibility: hidden; -} - -.feedme-mapping .field-extra-settings .assets-uploads .checkboxfield { - float: left; - margin-right: 10px; - padding-top: 0; - margin-bottom: 3px; - z-index: 1; -} - -.feedme-mapping .field-extra-settings .assets-uploads .select { - opacity: 0; - visibility: hidden; -} - -.feedme-mapping .field-extra-settings .assets-uploads .selectize-input { - padding: 5px 22px 5px 10px !important; - font-size: 11px; - line-height: 11px; - display: inline !important; -} - -.feedme-mapping .field-extra-settings .assets-uploads .selectize-dropdown [data-selectable], -.feedme-mapping .field-extra-settings .assets-uploads .selectize-dropdown .optgroup-header { - padding: 3px 8px; - font-size: 11px; -} - -.feedme-mapping .field-extra-settings .element-match span { - float: left; - margin-right: 10px; - padding-top: 2px; - margin-bottom: 0; - z-index: 1; -} - -.feedme-mapping .field-extra-settings .element-match .selectize-input { - padding: 5px 22px 5px 10px !important; - font-size: 11px; - line-height: 11px; - display: inline !important; -} - -.feedme-mapping .field-extra-settings .element-match .selectize-dropdown [data-selectable], -.feedme-mapping .field-extra-settings .element-match .selectize-dropdown .optgroup-header { - padding: 3px 8px; - font-size: 11px; -} - -.feedme-mapping .element-sub-field td { - background: #fafafa; -} - -.feedme-mapping .element-sub-field .col-field { - padding-left: 30px; -} - -.feedme-mapping .element-sub-field .col-default { - padding-right: 30px; -} - -.feedme-mapping .element-sub-field td.col-field .field > .heading { - font-size: 11px; - margin-bottom: 0; -} - -.feedme-mapping .element-sub-field td.col-field .field > .heading > .instructions { - margin-top: -2px; -} - -.feedme-mapping .element-sub-field .fa-level-up { - float: left; - display: block; - height: 100%; - color: #cacaca; - margin-left: -18px; - margin-top: 3px; - - -ms-transform: rotate(90deg); - -webkit-transform: rotate(90deg); - transform: rotate(90deg); -} - - - - - -/* ========================================================================== -// Full Page Screens for Error/Success -// ========================================================================== */ - -.feedme-fullpage { - text-align: center; - max-width: 40em; - margin: 24px auto 48px; -} - -.feedme-fullpage h2 { - font-size: 18px; -} - -.feedme-fullpage img { - width: 70px; -} - -.feedme-fullpage .buttons { - display: inline-block; - margin-top: 15px; -} - -.feedme-fullpage .progress-container { - display: inline-block; - margin-top: 15px; -} - -.feedme-success-btns { - margin-top: 2em; -} - -.feedme-success-btns a:first-child { - margin-right: 1em; -} - -.feedme-status-spinner { - text-align: center; - padding: 6rem; -} - - - - -/* ========================================================================== -// Direct Feed Additional Styles -// ========================================================================== */ - -body.feedme-message .message-container .pane { - width: 36em; - padding: 2em; - margin: 0 auto !important; - - -ms-transform: translate(0, -50%); - -webkit-transform: translate(0, -50%); - transform: translate(0, -50%); -} - -body.feedme-message .feedme-fullpage { - margin-bottom: 24px; -} - - - - -/* ========================================================================== -// Help Form -// ========================================================================== */ - -.feedme-help-form { - width: 320px; - margin-bottom: 40px; -} - -.feedme-help .fa { - color: #bbb; - font-size: 15px; - vertical-align: bottom; - margin-right: 2px; -} - -.feedme-help .contact-block { - margin-bottom: 20px; -} - -.feedme-help .contact-block h3, -.feedme-help .contact-block p { - margin: 5px 0 0 0; -} - -.feedme-help-form .errors { - margin-top: 20px; -} - -.feedme-help ul.feedme-info { - list-style: initial; - margin-left: 20px; - margin-top: -6px; - margin-bottom: 30px; -} - -.feedme-help ul.feedme-info li { - font-size: 12px; - color: #8f98a3; -} - - - -/* ========================================================================== -// Plugin License -// ========================================================================== */ - -#loading-status { display: inline-block; padding: 6px 0; } - -.reg-header { position: relative; min-height: 150px; box-sizing: border-box; padding-top: 50px; } -body.ltr .reg-header { padding-left: 150px; padding-right: 25px; } -body.rtl .reg-header { padding-right: 150px; padding-left: 25px; } -#unknown-license-header { padding-top: 42px; } - -.reg-header img { position: absolute; top: 25px; } -body.ltr .reg-header img { left: 25px; } -body.rtl .reg-header img { right: 25px; } - -.reg-header h2 { margin: 0; font-size: 20px; } -.reg-header p { margin-top: 0.5em; max-width: 515px; } - -.license-meta { margin: 50px 0 25px; } -.license-meta > .data { padding: 0 !important; } -.license-meta > .data .heading { width: 125px; } -body.ltr .license-meta > .data .heading { text-align: right; } -body.rtl .license-meta > .data .heading { text-align: left; } -.license-meta > .data .value { width: calc(100% - 150px); } - -body.ltr .indented { margin-left: 150px; } -body.rtl .indented { margin-right: 150px; } - -#license-key-wrapper { display: inline-block; } - -@media only screen and (max-width: 768px) { - .reg-header { min-height: 0; padding: 0 !important; text-align: center; } - .reg-header img { position: static; margin-bottom: 14px; } - - .meta > .data { display: block; } - .license-meta > .data .heading, - .license-meta > .data .value { width: auto; } - body.ltr .license-meta > .data .heading { text-align: left; } - body.rtl .license-meta > .data .heading { text-align: right; } - - #license-key-wrapper { display: block; margin-bottom: 24px; } - #license-key-wrapper input { width: 100%; } - - body.ltr .indented { margin-left: 0; } - body.rtl .indented { margin-right: 0; } -} - - - -/* ========================================================================== -// Welcome Screen -// ========================================================================== */ - -.feedme-welcome { - text-align: center; - margin: 0 auto; -} - -.feedme-welcome h1 { - font-size: 28px; -} - -.feedme-welcome img { - width: 120px; - margin: 20px 0 30px; -} - -.feedme-welcome .btn-start { - font-size: 15px; - padding: 14px 28px; - height: auto; - margin-top: 20px; -} - -.feedme-welcome .or { - display: block; - padding: 10px; - font-style: italic; -} - -.feedme-welcome .btn .fa { - margin-left: 5px; -} - - - - -/* ========================================================================== -// Plugin Footer -// ========================================================================== */ - -#plugin-footer { - margin: 24px 0 0 0; - width: 100%; -} - -#plugin-footer .footer-left { - float: left; -} - -#plugin-footer .footer-right { - float: right; -} - -#plugin-footer .plugin-credit { - font-size: 11px; - color: #8f98a3; - text-align: right; - margin-top: 10px; -} - diff --git a/feedme/resources/css/font-awesome.min.css b/feedme/resources/css/font-awesome.min.css deleted file mode 100644 index c54b31cf..00000000 --- a/feedme/resources/css/font-awesome.min.css +++ /dev/null @@ -1,1806 +0,0 @@ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url('fonts/fontawesome-webfont.eot?v=4.3.0'); - src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), - url('fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), - url('fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), - url('fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), - url('fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); -} - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-fw { - width: 1.28571429em; - text-align: center; -} -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -.fa-ul > li { - position: relative; -} -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -.fa-li.fa-lg { - left: -1.85714286em; -} -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.fa.pull-left { - margin-right: .3em; -} -.fa.pull-right { - margin-left: .3em; -} -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} -.fa-music:before { - content: "\f001"; -} -.fa-search:before { - content: "\f002"; -} -.fa-envelope-o:before { - content: "\f003"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-o:before { - content: "\f006"; -} -.fa-user:before { - content: "\f007"; -} -.fa-film:before { - content: "\f008"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} -.fa-trash-o:before { - content: "\f014"; -} -.fa-home:before { - content: "\f015"; -} -.fa-file-o:before { - content: "\f016"; -} -.fa-clock-o:before { - content: "\f017"; -} -.fa-road:before { - content: "\f018"; -} -.fa-download:before { - content: "\f019"; -} -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-play-circle-o:before { - content: "\f01d"; -} -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} -.fa-refresh:before { - content: "\f021"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-font:before { - content: "\f031"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-video-camera:before { - content: "\f03d"; -} -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} -.fa-pencil:before { - content: "\f040"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} -.fa-share-square-o:before { - content: "\f045"; -} -.fa-check-square-o:before { - content: "\f046"; -} -.fa-arrows:before { - content: "\f047"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-times-circle-o:before { - content: "\f05c"; -} -.fa-check-circle-o:before { - content: "\f05d"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-calendar:before { - content: "\f073"; -} -.fa-random:before { - content: "\f074"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-arrows-v:before { - content: "\f07d"; -} -.fa-arrows-h:before { - content: "\f07e"; -} -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-key:before { - content: "\f084"; -} -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-thumbs-o-up:before { - content: "\f087"; -} -.fa-thumbs-o-down:before { - content: "\f088"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-heart-o:before { - content: "\f08a"; -} -.fa-sign-out:before { - content: "\f08b"; -} -.fa-linkedin-square:before { - content: "\f08c"; -} -.fa-thumb-tack:before { - content: "\f08d"; -} -.fa-external-link:before { - content: "\f08e"; -} -.fa-sign-in:before { - content: "\f090"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-lemon-o:before { - content: "\f094"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-square-o:before { - content: "\f096"; -} -.fa-bookmark-o:before { - content: "\f097"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-rss:before { - content: "\f09e"; -} -.fa-hdd-o:before { - content: "\f0a0"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-plus:before { - content: "\f0d5"; -} -.fa-money:before { - content: "\f0d6"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-linkedin:before { - content: "\f0e1"; -} -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} -.fa-comment-o:before { - content: "\f0e5"; -} -.fa-comments-o:before { - content: "\f0e6"; -} -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} -.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa-exchange:before { - content: "\f0ec"; -} -.fa-cloud-download:before { - content: "\f0ed"; -} -.fa-cloud-upload:before { - content: "\f0ee"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-bell-o:before { - content: "\f0a2"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cutlery:before { - content: "\f0f5"; -} -.fa-file-text-o:before { - content: "\f0f6"; -} -.fa-building-o:before { - content: "\f0f7"; -} -.fa-hospital-o:before { - content: "\f0f8"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} -.fa-circle-o:before { - content: "\f10c"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-folder-o:before { - content: "\f114"; -} -.fa-folder-open-o:before { - content: "\f115"; -} -.fa-smile-o:before { - content: "\f118"; -} -.fa-frown-o:before { - content: "\f119"; -} -.fa-meh-o:before { - content: "\f11a"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-keyboard-o:before { - content: "\f11c"; -} -.fa-flag-o:before { - content: "\f11d"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-code:before { - content: "\f121"; -} -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-code-fork:before { - content: "\f126"; -} -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} -.fa-question:before { - content: "\f128"; -} -.fa-info:before { - content: "\f129"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-shield:before { - content: "\f132"; -} -.fa-calendar-o:before { - content: "\f133"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-ticket:before { - content: "\f145"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-minus-square-o:before { - content: "\f147"; -} -.fa-level-up:before { - content: "\f148"; -} -.fa-level-down:before { - content: "\f149"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-pencil-square:before { - content: "\f14b"; -} -.fa-external-link-square:before { - content: "\f14c"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} -.fa-gbp:before { - content: "\f154"; -} -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-text:before { - content: "\f15c"; -} -.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-youtube-square:before { - content: "\f166"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-youtube-play:before { - content: "\f16a"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitbucket-square:before { - content: "\f172"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-long-arrow-down:before { - content: "\f175"; -} -.fa-long-arrow-up:before { - content: "\f176"; -} -.fa-long-arrow-left:before { - content: "\f177"; -} -.fa-long-arrow-right:before { - content: "\f178"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-female:before { - content: "\f182"; -} -.fa-male:before { - content: "\f183"; -} -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} -.fa-sun-o:before { - content: "\f185"; -} -.fa-moon-o:before { - content: "\f186"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} -.fa-arrow-circle-o-left:before { - content: "\f190"; -} -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa-dot-circle-o:before { - content: "\f192"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} -.fa-plus-square-o:before { - content: "\f196"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-pied-piper:before { - content: "\f1a7"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-spoon:before { - content: "\f1b1"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa-file-word-o:before { - content: "\f1c2"; -} -.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} -.fa-file-code-o:before { - content: "\f1c9"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-genderless:before, -.fa-circle-thin:before { - content: "\f1db"; -} -.fa-header:before { - content: "\f1dc"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-sliders:before { - content: "\f1de"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bell-slash-o:before { - content: "\f1f7"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-eyedropper:before { - content: "\f1fb"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-area-chart:before { - content: "\f1fe"; -} -.fa-pie-chart:before { - content: "\f200"; -} -.fa-line-chart:before { - content: "\f201"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-cc:before { - content: "\f20a"; -} -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} -.fa-meanpath:before { - content: "\f20c"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-diamond:before { - content: "\f219"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-facebook-official:before { - content: "\f230"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-server:before { - content: "\f233"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-train:before { - content: "\f238"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-medium:before { - content: "\f23a"; -} diff --git a/feedme/resources/css/fonts/FontAwesome.otf b/feedme/resources/css/fonts/FontAwesome.otf deleted file mode 100644 index f7936cc1e789eea5438d576d6b12de20191da09d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93888 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 z -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 E0UHWiZ2$lO diff --git a/feedme/resources/css/fonts/fontawesome-webfont.eot b/feedme/resources/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index 33b2bb80055cc480e797de704925acaba4ba7d7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60767 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%0DKehr}RFC`2XTB_?==0w^)u1m5PYii@6f)6_5Ydu zv+NIZ_(Rt}Q++LT5!n8!J4x!>sE&v_3*cXat{Zq5;17w;B6$epw}$Rg`0nFJg5D-L zYvw@(goc5TeJjM($AJAZxZHZN}RzBcP0=_>ZI6WVGU zO#Nk-YqZTa3{!84P0K~GsI#32<+_AsXU43wILwZS(8n%S9)lP!Dg$$e2$$9$E?^Nj zql4do#+a8qEP(bD2)DpP|$dp<`TZ#bY6^~7Xv_Lle)77^OsVhMOm(@ z??8O8kA%}ZWpR&2v!7qFSw@TF6d*=9YT^Rtk(n8p=CQWvt1Om=n&5uP;GiT6 zMRvbm39kbp*KB`qoVg12w52Z)T}`X41P>D|q_%K#zuhwb+BpEogY0E)KnSy#@+(m5 z20@LG@LUEvk`I|OIUV^^0_YtG9AElBS!Dsh%k^P9r0moJ25Lkm-gh#igwBDhAOj0!EF&8MxV^-m1U1MEd?H7} zL;r;tfFIT|ei3-Z@gyM=!%Ba7Pa626JRAA`V<2D<{RLRT@0o=bE)XF)nFtUL67`2L z{?_Qz_`Yy2t+I)?9&z#z__Q%L3pnhN}U z_rN#WU)kD59D4whbSYERHY01jM7id50EuI1ctl?<_IT=Y5vP>(sNNkB&U5&F&^kBhm5y{o!y!F+4wdxXoy;!4$W`?_nL(+bK_QDAMUV1O0AwZ| z6j)s}9YEZbY-C^Y)9Ej`aS&~{sXCG2SS3ce$EY;Yv-c8TlrD$C85ATlLZpGP_YWfi z`RQ?z1@zIfa{yqfsUDMEPpwuX%XHdO+ASb3EPi1fBPocvfgsC0xa^CG2SWBPWQ&GS zpCXPti8b>WkYbf#Vg%A?&_UwUsUQE_t4GX?7QqUpKJ2Iw#%)Q4Ft(`9Ja&Yk{C@38 z@%T`)#wWy(kKfEH;ZBQ(m*Iq&L=<)4D7tNO{SsA4Fp4D?(Ex6nQS&f3TK|atgj`fE z2|OX0(&(ZqxJd~IANX&dvX?U14_<~h2(lP6k^H8ep;2HW6oPo?U%v{M>|{sU~;p zLTv$OTx3H^4zNUn4wUfo>j{CEvTC@C+cw+cW*ABH6u@!M2EdBL?1GbL_#e;7YDBas zic?MTazk(khXSyPeDom_I~wkLv?Wr8<%egEfM!*M9^kl$>zsVzaP}S!gcD3;Czy#58RTm?`p)RTS8I<-sC3+*n{A)P*rU!@Npj`e{x9xsif2v zTW`{q3p^?A!Mk60Q{(FLt(&TVe9z z0-!PiOV02JcNeq?AbJaI+B9xC;LB=}Ho0vH(@;Qe0zq~-8ckOa!(u@Wou`p_TR|QT z38H`lJE$G{q1egUX@&v$x7wNLWD#j*!D58GLv^bT+jpdKBrK#SsQsWK(+RO40VA^w z0nA7MN1Y1Fc#5JkwD5TtHG1t;lo=i)U+kFG?1Jh11h9382!marrRE2eZh;JGh`wNO zQA_~n?%97HOKLA^#oG(5*bgSllS%rOc(S%Yj00cYR;!D9G_90{pfq7D4I*$k?byOV zR|epi%oIJ{ou`5zS!-_dnxOa{uNv)(luMo^5TCOItq}2}sxCztLEzBGS)Mf6dzaw< z!GweAgvFYJu&mH(Vl9HJBV%=Jz~~i%nDGIF9ncTET-AQ=fv{L11&K_;ei!iht(!De;ym|y7ksL|^5Ko~B-vSh80++s?unD}bZaYa@ zPH4M$&fw;xEGN3_H1vHW><%-+dg7dfW)F8$bB+h7sThoOtteO(v{&-+iK}r$%G))# z*Nhx^!ZMj1VeG?EkWg+0CYQSX1t96fV9^3c+9C393LU&CHsFCa1q99$`zTMsEWwLc zxsw1|A?k8-m8HCrk6;K7dhNDJN3R9iws%6vTq_}PtR2CZ8TG;ltZ4I}sU+^s8`P3F5QxrypG1-{ zGlr^7$Wsy(lo=xfC~BpKfg<2z4OEeEF@~x{Pi7O#CvqMJy+f+}=CB_$&IuEslB@s# J000000038FvZ??8 diff --git a/feedme/resources/css/fonts/fontawesome-webfont.svg b/feedme/resources/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 1ee89d43..00000000 --- a/feedme/resources/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/feedme/resources/css/fonts/fontawesome-webfont.ttf b/feedme/resources/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index ed9372f8ea0fbaa04f42630a48887e4b38945345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122092 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 +|+&Vdls@0SAya!5R?! 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
6YuX1v{q9=vI}{pN+P4FW!CI?#11< z!e^rg&DeJG*#!$zIlg7-?u#E=qIS=ivSWdEooPVGbLzEA7O}Mrjp1bF?RnQ}J~6E} z3%gUJy6~mx{3DB&T&r%oy)qeYY+xJ3O#(kz@(kUrZGoL;93B^!U=)aD0V`YuE)P@N zB$K(Z2=oEUrEn8eVc}YP(Zog$w@IcqyNPGgcor!NaUlHlA!i|exSFX?M_+~sX_Xwa z`}K}GcX`B7EytrrD(dT^_eS&6qer53>B@Vf(U&Xg$Ci?BJnPURjs68fEJ0j)ox(?lMM;f-SKdOlAkMchv5v|xCO`}jn_2@$R*N-mSzwE3Z zE!%PJ+2@>tnn!18U0|)|fLkjtMuPK)%0L*40*xxvH>8( zX&o=nps<}+Ssd}hp(hEdf9sgF@kDOptPb`!tRK_v0|I{IE#oNv594Scch0#t-gvHD z&h9dCv~k5uV;TE=b&}m>T#*!A8G0Y`d>QymmljE@rH#@KX}7cww@8W$OBuvZCmAEH zZme+-=b%9;Bfi*x-jZc3s8+f}=cY(lhn)tx9njL0a{-UQ zoEZ^IPzlwHKRlI&mXZj3SRb%_k*nt8z|{*Ogy%nMDCjyl&a9du}^> zrCndQbl3i6Gp){@JDt{<%l7YDx=vT?8_(Kv&#q z%0QyllLg6lOSi%%PFQ$HX8EG!*Y@0*Szhh5&YNd-Rxi)o*)!$R^qI?B?_4-xB2&8A zEfziNsZ9j-HtcGdlAuF=O3SW>ggEfN$@WCRGCm@EKo+t8j`3{PSaL1<9YD9EM!ZHM3W+1Wp@aAbEXnZaMI%f-|KX&Ft8~69f zmT60~%cteP5vi$6m9qz7RPC@C7frhol6pSt!UwiJe4%W)>XVQB=8F7dHiu`bji0~p zz{X2@2LCo~d3NbEKC3KM8LKcZ!o4mVdk_-+D^b}x+QSRBIx^PoL}`}!jSL1`I0P*P z2RJ+@_`*#=eGL1!qA0=i<0LQoVI>;oD@;^cPL|*klFJ2b#vg1G+@@A8hvAknO$Y)x z95R`{VqW;RXCFSD!OEg_L9y)dBret zYL3v{adD({zev%6y?Lr6Esmjn(3)Av)Ul=E2?~m)=mq90?9h;lk7`{}3pe)q$&s1K zF{1FN9xc_j9XHjAqc4^gcv(Eg?iQzfAB^J6xs-o5_6i$`PK{|npWL+W)xW_atW)X% z*1lA_4(LFv8XDbvzQ z)TXAVVd**c{z-#y{pKYbyC+SYRM~h*#4<7A_e}R}WDC!4>Ey-%ZG3n4_{#F8+Ox{e zpFHovnM-G}8`VFV7CNiTE2L7_c>=&MzfX<+l+c2 z*V`A z?~!cTNq~F*_y0kBmd<$R^FH(U^phXp7u*|=J(KGjd--Kds@^$qv(aRg&GW6*b&D_B z*3mw3;#-q?nxcPWx9P_C#zv=hb$0FEHs_jgHa*FWYi;>9IZ|HQ*4&wxKC`@XPN4u8 zGS$P->P$q+&sq9-@)DQ1DAu*R#TkT5c~j%k=BCA+?d@&uid_FmO}uXNnue-K#aO4u zS8O-yt(Hw=^JCF6p>SGEKQ3D2@dg7etsV0_^T4NM=)x+pI=P_nBD$;Ask%Yu^Pt)~ zkY=yP=gO+BT4VCNL6ZS^ub~DSG#*sLn~LuD5(aOkbDrEMOsH)T|YLe z7cIe-+5?3P=kCaF%x6MNq6N8tm{nUIX)+{5?o+||B6rI?Y=^MDhlRu1x`*EnWl8^vaXefW?b(*7~oTKXQ7Y+c|;p_ z?a-kzd?*gV4mz{0W*wgXhOC#dS=kvni4F%(-j>F6a6ul3K#x&FsI+lb#Qmm8@FAzp z0v7cVrGSy(414K2EV>a$WhKrNCtx>t-szOJv_J9U%9Z)~_+uA8`)o@K{>0y>ucW?} zJ`jJvpM9&Ip2ef}^sMvw>-lr}E0sb1T+6em<>@Oze)<5zPDvy7@oQ!dYl|3s zvB)~)84A_|n2;2U(2@y{YTAMUQw2XTGHvh?rg)XKS|S}Vt-QpN-?A89; z;*gQQ1pPrhX0ZA&n^{6%@2w0L;w6DT@C2wIj&bys_D3D0gpYz3@MKcKz|%^-o-~ zw6tqxz8=^IT1U<6_uqW~RU2EUS@luG54J7LS>=#kQ8HQ0=WvTo=eD0J zUfA2zz31}wo^OTBA>CN$^;^%n`R%*+fA`}>t&yEe3aTe=ThLjhET6n_DZBVD+y^YX zZa}*j;`=kTbE?U;(v_pDupxX&<+y1Ubys6>Q>6=hhBD9kmdF1*dG`|=dLG|%R_W}S z7LR0k%H<-B!Otqc4s{f;Mz|I5VbUbMLIp?D*U|8f2u7j};8-hJ7` zwYP_4qqWT8bG0o#^449K-uJgfErmN56;w^wI&W%~vU2sUL&3Zx*Ce@Z%Ll1u9;by| z)`k_He2PiH)QQwVWR^j1zitXs=mdb;m;P=ms~4*2>4A=Gm@k38h?%QSReOqnb`hAk@KZMmg2u zWEfLN3)Wt0HkaCLTHtf<-dg|Wo9l)5iYB#pC1;&A@1pJVx?85qIao2*S&|r2R3-iR#<{oF zPfRQxf6ZA_w@+zKw1tD?);3+fXKp;)yryE^y1BK3HwS8$x8;mQV#5maSV6EBHJ;r( zd1G^)xM|aGf4k{zlF_*CMuRMdx$uo8X_==-g-VJ7nu_4OjUk2+h7rXOCPY+@LWGbU ztA6yVM^XC8Z8y#=v5@YyWai!@duNuYJE3I5k%1)9CMkL3L#Uxa%VGf?wk+Ar`mXAV zx|RO-uQ_z_tXUTyQg=!T@;BoFg>S{gK$0GzyhI>kpkXY5>{v-ewZK16jcHTCDS)n| zB;WynO)P+bc6B47$cs8LvI}}C4Q5S>+FEgAs@HB<`WC{VwBVzA0`nn-bP4AoU$!dwyv?1hASSK`J-FGbeMbr*x zLu7|m%lH+2hkjSvGt+mRM~954(F6$fWSH1_eTYvMng#A35UnSOG7VgL5UC3lZ;X6n ziKIgLpo86jj0t7q*oG^{O*y}Yv6}OzjQcK|I<9nOr*h>oC1}n<@8ASRpnIzE5nK7^sT*fn{SFiidYUw)V$vF$hFYuU@Cm|ZKPFMq{tQ-HpYvOf-Vet>Fx^v~q&S~eIGx)pI z3xad~u1PidHK|{*>)5Ab#~uoeZ7ldxy6w|z5IkDJH&EDj5!9Qc$0p4rEi62FB}~>M zO(6s%D0#J-i(XOQyZu4s=jZB}{wkx*uIqerSI-X*&Y5%YhdnDFn|xK4)nngA=DOi_ zmivmB3%K0(Ub*P{1I8TvL4#mi(SzGx!&6fx9?Y_CT)Jj6Kysl(gPrfM@~;WoDxATP z1$if(DF8u0%3&=|Ytj&aBa3 zrj#^!8>4m6P0=VL>tQLwx2!Oo;C*&u4DU914F*z07F+ODQxM;WO;+*<_zb>v>a8f% zX>Q$nQd5e$#EH`df5GPl>4YdlELnfx6qsRjGkfN$uYffO@uTDugGDlyv7~11$aoDh zJKB$8xEz`6@{IhGr*B{;b@%Tz+F*5sZcWQ_ySwYwgKm47u#*3hdXevh^nF)Gm6<1~Q(7ndM|`@ink(0xv%Ft@C3*7R>O;~jUTzD4*9$G-x_L2mk5=ndCO$(~2n z&b_6valYGCV6^r;^3o$8T=loFfOHu6{HxI%c3<#1Y}JD&HR2U=lB`LTdmB?6^u57F zk@qm*xQGel<|;7?+92+9no{ps@+8E-NzW-8B)!w(lz%4q?QAMij6A@ufe(ZDbGLtB zca9+E+Qs5E%w+S6? zr?hI2V;A!v9v4e6fO32=qxMNDnSRM~kfArLY{Kw=)JQ zU_PUtJT_Vjz?h+SGc>DceyLZTgr2CDy5d@ z@^wqDfAT+{yncy@MsQgws`0kajM}Le&n_>Yeeu*avrT2DZ(e`>H?f<&=C-X>GqzXf z)<=WEXlg_YCw%)etfvpoJY<+;!|6Y!98{n}zT=mbD z9o*gq)&O%9-tE<1I|&+S8Qx{8)rL4j6*kRsqSs|Ho0T6UC1rxAr0hm|Nfq$&L@yOv z?p84_SvP8de@5JgB$n91%Ha~i8Bj`Y^MJk%NR`w_AR$~vOCmZ4I1`9NMqEe6N`?u; z?R}Jpkmgvp@btEK8Jfm^{^EX0df81$FIO0aj79#M^T{HAI}@9ytbj#+-@QUNa*=dX zsTEWUnKpY-trg}sxt)IBI}Q03*y+D_2zL4zZ3SefA5}&)oth#Ma5zK0$}m!5e0@n7 z=`(1BJB?X|{gN{FqVc*7xZi9B&~-1BmUX+7kIqm?6p_nOJg!%#Sq#0vkkw0VI~uNH z161lk-lQ+qBvc<{oG zy+^h$wbgdK=w96l?6R)b)$SMD3VM19+7d@LEXgaOSzeO2gb+H0&pLJ$8YdLgmbh$7 zw;$OH+w@P~eHUnJXba+dlIga9jx)o*0f0y6a07(86*gMF-c z24e5rO_#<^LF*9mH~uBsR(h13N8f$-=mGby4{`X8{37suPUSqV;XLfbNm0H4$0^OB zU%LiLb`Zm3WLUyW2i*!4}J4^UzY zxi6K(v>5!1CV^cftX7fzhn|)C_+= zEZ8Xxfg5MwZIB|VpKLj)1Z{_}!d!d+{wM=U8irbo)8gC?<;pxW8)rV@l)xvj-V+)T zv^;J3>>aj%p2X|<+pwXC^K_q`&ffNr=0}=WHGj~20uIUs52SL22;hdgeE5jCy#y^| z*uYVC=vd4;&c1%8FR;n8Z;es}G0Fx4VA+hbxRLu2XLq|gu%(|8u z{`t#~{3$_q6Tk}k|844p@AeHS7M*)cGlg^ z8SXyX^5gR1=|k9As9JvvOh+P(H=)|6TQsXiTByl4RhMDsT)g|zeTd#v9Y&flPBOg- zrkpR&DsRHKDtCt-Rqfa5t`$`Mo$?~=*H-;Ah!oO*1)IL%MR4of&7hywnV~~OjtBZO zHti&lfq?6IS0d1>T53$fc*#R1x+SjiOPKocodb2Ksu3xy2AJGV;JU zO>I8@QYI1{8pEGPmz0v+QlYglT|{NUOT{{v<#draSsm-*bq!>_t%KVTuGYbX0T1O; z#%g>rAU50Lx}bEhx$T#f6}kVzMu7ma2339s0o=#h}TW~=xCwu0G}5Ig{UDu%GjfNp9;V z{tG$jGxUe79odwKxGr@R(*Pz;Hp84j`k*LNMcwgZn((+Z5?-he_CZviQf<(lOm-9| zqV!=e{>QMj8mMMzd1<&@s!C_5NJE}j=^~+U>ckpdE~QT`8+`-cQcH!;k1UyxKv~pM zjebCA8d)#_eD+N7zoZ&)abrlL#q=LCOCmhMturv`bQgu~#%e$$Diw&ydjkj6Mx(Ne zUBwQb_VO`)1HTa)^_E@AF7>%nF7x)Xpj^MmluNZIa{nLXoZ$%`eJB^1Zbw}d=24l{ z&s~Kt@NcmV40HS(fV z^HsG@7n&NAy@7;xC`V(8T(T0l9?5J6oT zxTl%IyrFk~?Lly+-sbO|$t+ThNd1a(@>%fpI*^@vraobsnXDY|q&}g#r)SpJXne8! z49%(1Hy&eU<8f^uA)pbQzk=-{ZOeC)ABsxT5M|8)chak{PUEtC!C3@tg4^~}{h<&k zK?1Q*DAi9!W-V;gLP*5VNH;>aiZjVgFFL2yLPW>f(iK}iQNm4#YRkmhC9#B(?8p7} zAjV}#DVKXeU%gZ|T;ydX7LXSX%%EId3!?0^Dy+9=8pC7>I7qE*Exm0R>W#cE#>t1-EN(UN`YM-B_ilY*=Pcz$ElIIz#}$P?@nd(yDN3s|^=B z9gD)glWqYEwFVp^hH?7VaxGK8s!<-K!iq1CaAxGbF`|a+O?;}y{+Yfm@Fr+xBROL5 z!LM=bD9uTzQ8m;X0=9kB1ifr5bUd)XkWHp`#tIHG^(pE2)B1jKW+)UI@ zXbX)dWM%ez7DB>nZk!Ai0rL?SKJiB7*ObeaXS6*fW3SYkl^pknr+_FxcavVzDdvsq zZqn;ln?OQ6X*XyICSVLM$^Db%yIyZasMUgtia*CIcca2|bSHUvoMhgV-o2#WIl>nLX*yN&Q;w z&0HD1SMT7q39n$CjsyhLHwdkq<4#@8cT$R{B-k*0ux0sy<;xF9pQ^vU2nFnxUSZ#X zWt3fV*@0(}j{&(0l>fuIb3rwvr>>T!u6cwX4`Br=IMx5k4qxCrPsb6V%O=Fmp?=Fs8O2hSgK>y!tl+){e} z!NkhLm(RU#?&XJ9Ci+`rSKRR9Bg%_shH%@J!J18XZ@l5I8xO3%dt*)TO4idg zzoTRR$j!wU+~+ZwJojC&c>nZrtF?Ukex`r*;+b1oA_lE%Oxx-SyI=e0=-kCS*3OnuHNyF`ALE7q})_D3DyGsZ0NwU-l~cawJQcwdS1BU zcZqzTBuk;N1k?zp8gi#X#oC~E&P?qL_@TyLA%v`gJzoIjA4-i&{wL=}f3EyIs`m$S zD)l*6+;>Heer&a0G4gpWKupI!Hht{_A1Q+$J+KygCVlk4`=jtN*vl8*c;kh50bbL! zYE@Uj53jOU`Sj*5n4VJTF?u}x8j$Pd%F$P{=I!b0=H+mQSUTW_Odc0Bb^aT5)BCH( zrfXH16Y%S)u1dpyuWmItmG(@v^!myiR8=tiPwQrag@8~RVC6?OXpnLJ*VnI7G8RZd z#zTa1GN8o%do@vwg6#4CR^d561D%2$ZX>~%^k##5}(nBu2Q{H^D@9;Z^``%PwIet@2zRCJdd4?We$19cg@Oo2Oth@;< zhB9^^1N{MqivPG?glKUD{4=eUYlH>p8c)tV^{=+o(02^Ij*BJxyWKP%sg?Y9+tFs+wm`H@3-S$ z`V98uK`@MBw>>rVJHKuC_7SI<%Zf&Q8$h_!-!=5wE%g2`k~(N)z5tpYl5%0ow(vVX z&Dy52Pt;>2`%?NOy<_T6cK!mp(o41Y)J`$FgGu_M4~ev;?jyWW6ae(xi#&V_(N|3~f+U*MPu;9*9X4b#@aOavjJ4{{GpEUJ`TgWO&-F@zxQ$@{OGJAUL;#(ZU zyD(m1Ky#3H7(ydG-kNIsh(-cF_Wze=5fhKU`0}F2CJ$bNcgtxLIj@YDalLfV6V8eq>EH zNs{>craFW6xI@tWaH;;;687=`tRW#sk(|Qy2SpTLc8U_o>&8?}%c!blLg?gLlF>RD zsT?UQFeaQ<5d=&aLpqSrN+V-HDd)G)MjgZDC$H1Zll~69KoMoz;kitQV%xaR&Fcnm z6CtVtu%QiB(|q8+oTiwK1-#BdruA&;LDyOsthU;9U z@QKgxutV}$WRrT3>N$Po(y}Gy)x&=@M<~51@z$Lq?_swczn?unnGk4*MaPC5 z!6zx(D2iid)6IMKG@2buA7F>>nKIilFzP<#MDCA|QJ)AWzc_hJdxhMO=+R=-p&V^5 zI()K-9J4Nta~mZuPdIrp@K{k7Ic~Y+d?ww+m~#8X{G-jRt;NhfQ*K%)dwmX{GF};v zomXC{+!%6}vwywo&dc?@i`3vwq5VXyv4u?>Y%REtt(wT{ly52KaMb*_znP<9_D{Al z)S&BRKOHkh8P};J4uPFa!PjO#SR*eVt(@LLMGPT=_*V+wV)BKlq@!3idV{GxZ^YD-^xpi{Yz4x)A~VBpfkezXOg14SVj+f%OLb zFz0?zYb{lne7<%9xirCM7cloWb4^mJ4y-zc5M-hJW|NFHD15 ze}lj7zTtbsZY zE~p3>_ZrA+gvdWGV1LLh@?k-YyK z;0EdiQdmq4H^to3k+TVb!q8v=f_v60xE!2*wM-hyp^vgBPil-7vkAU?8tT4YHLp{D zR>ZI@s6au=BOcEu%n_U$1i+B;u`}XfUGq~nf1-Sn1|4EfTvHxS;|j4^9^u-o*QEZT zzM9>9Qe*NDeUKSWYWP?{z$%7BO;%8JKTk2$djVk!vDu!8Q~5Z^R0tyG`ox1zEfkhJ znKKPbqM(DFV5KL`ewoMB6y=b|QnbAoTgc(fIj>wG_msl*Pw1;LPUPH>bl<)f|MtC^`bW3YR;~TZADF{Y)33^yGSAXxX@~jS_p~09S|6 z+xoc7fepiDew^xyNo)H^5}^&1;T&uVPzKTm6DK|5BQC^#P?_RljF*HAYs0V4&t-8s zjk8=9CF^XIh5G5;w2`za4IPWLhzmQWxgH5H{b88^MDsqCV#u z#`Zk*lJH?l5vAH$XU(c@9#d0c^{x*@=dC~Q%Bty$XEcZ(+e_VPm6KMjo+f=omEL|OSk6wZ(Zu!bO&xKnkZ^Jk z@)lehvD!fA93{VXFR5Pm2*5H5a)f~=CRrB{^d8oJW;5jsCSy%0O>Dd!$0CkJ9485O zN2)8Fo;#>18&inAggpiq*06UtUO*2{Fwi)vID8Xy9zbD%#Rth74mhV|LY(E`skq{W zbq>M~A>0rO)m7DbC^8M>M4MbPdrW6}NA$c9^O_1T>8WU)9~l$b zG-v+#`O*A}XxEA(hN!^;#7&_fDjr$U6|KPa^A~h&!d>%Q6CYGEfXMnIW#!&+Rb8cX zm$E13&`%e~Z;8ubHH>xRq8;U(V`eW|I=8f|YMi&cEaDd=V2CnFGwRWFNygQIw2b%~ zrvWFE60Iq5vVUX#X>=6np-w}Z{&g`8(E+ZG*M!o?voaB@)?*P+p~3VBKe;?R-~V?lV`QMk0%qmP(v4TWV$ z>y?|2A84rWK4%lstl+{a_1SYCFt?3!kuHl^-?>KRqSOt?53IdMn7wA*X0-x!LcVfy z^1yLdcMZVh)N9#QwR9*(JQ<)@&>nA~8lF$%p7e7v$*5Y)WbWGlT7xiKK)+&vMWkTb z8Yd-`#IEIk?Q36k)sDS&c5|-TUblD0Rjb-nCl?`sOgGn!pZ1jaa7wfA{{0uv?F{Gu zn;Ynyd-4AJ7pjC1-ywYKD&~8OVtwS)pJXgF%p~J6wUDsE>t6EK~>eJJjG6$1}pNP6HjG%mq!h%$xdXtOa zF#{J@R1zlZNzLZ#)x~bls!;QmDXnhFQEa#P9A??oIAMKb4(t+ER$(=o}XwWUE_Jxm1??Lb>VDu5RTryRly~B*1^WS5xthr2k!gg2Eoxp0pAa)Dudxq zvZ1#++q@%wV=cn2UuHEf*IJU|nh+NMysK8Ye3ZT!w;|-c2KUwCM!JvREc|MeQhD_E z@oBKb1jRyGZ3(S^UA0;qO)}$woH-Q(ItkVcF;gI87g9njhXYYD0`FgIIn_z0^(^t@Qth zHv-yeM288xPSXbo9xvh`DV8;0WD$f<#3k3%MP1=I@-WF!X@h<6no41{_qk^+4|&-J ziLI+nU2IbtS4Zf3_JcW(PW8Y!#cMMEzlAewYOa*y+QTdFS*y*?b}MO^FFOBUnVyOga;t+I93*?=O~yFoF#y?VWEb^B*G^%0fnYnlva$jMFW z$xWZNueRy+Ue;}OO7HWfcd%FK_38z~+1K5B?{#MbY@7e+cG*`i-QyOn;N1GR3wKT? z56HgTAixp-G{0z#7SEf-2W@ZY5*?(AZ-kt=$`fjUfGZ zCbN|a?aRFBcqev_!j=A9<^SNYo$0jZD&a#F%J&>ZG|}_Ie6km))`HaDue4Ng9SW2u zNl}$`fXSFG3(^ug+N*!`IZHMc!%)aK6qk9rV=KtT1=UTMeb=Hq^?}vxu-y8Ni8(DviyOFyYrp>&<=tDY2BXvR z5?l7Vj{jgZv4U*0pclDKsPF?e)xz9((8)~i+-h;SEw{3QzkGkK%#aP2uIgS_?taPQ zG#bR0NBc--#;S>9n`CDO;iMdb0%hBQEFp}}9`OjdRTYGhN#5?Tosv-?b+dDtlORIJk zwqDo(f=oGCQb(|YA?uBJ_2ACv#^~P0ExnCumIECv5cSP|}?-ty*F)AL6;vt;uiEhM@8(vpcS)U|p*w)Ft2XftMvU_HnWXW;% zG#;y}N@1jjDj(Z?-B4qTPSq%Ug)bK=B`K*iH1yzpMmTX1rc@tCSp~9`(2t*0-d2HG zlGr!y?j`OUzUO{Svy%fD>}L5ASl)qb&fQ2*X#%4JS;qnZ`c58~%qyO77WYxml}E2P z_ZsXh(O2wrK&#+rkO3T!1F#sUWWgWb8T1dfrS+XD&6_Tbt zs~gPTaKDlL0djeU6&p&x6eu?KId?QUfMVWCH?7J4L=5JC)dQ|TAFm*I(9 za&wn;XO}d)opQ)G8ml0UZ=Dt>+G);>1ALrHv&e&7330If)Q4(A2;M`^pxF{1HSD`t zKQQ>m9&yyb8oK=y@_?2-)kSCnG7iFL+6AktZA#gd{bG2#NWkMOLdv(cR=e#E*# z4|;)kv+F1O&uI)B?={*09WIt_sJQQ%VzW6Q#6~pNqqrZGpqor7z47rYx-VMO^7tRj zNO8he?y9Zqg%w5U%Pyj-r|0xv0ORC@29j(j3}$NhoIw2J-i9O6b5ZaH1==VYF_h(2 zc#6{@Ed5C~JN3tt8c5{7uNr2QHq z5?@^=M{z1y>~Q+9N=$UIgm34W%f!ANiA0dMJQ!3G1lD} zmdSP6%<7REfV8`~hfJh0{N;3Nk_BAQLIWO4a}=m6J; z%3b4EP~T1z#C9sw%64{6|Jr5993z&BUW+8z+&RGl>)sct*_(EQQS{3}#gDWxFWSH% z_@M((_Kbb;5@%6Ct_NvnEEe;hkD5J{z6L3okdKGSzjIl(T3qACI<4ER&NrCGhwodC zl1Ub6nvjtuxdq4r+XB%Jv)Q)AWZQWaQqRbE0g^;v=<@a$M0<=U%A+#lBQ^P4XTyzu zkYsgQq_*PmS)h<4Z4eZFT9YFVqRBe|+-x~#1=V!Lzkl@f5r_!ukaNf=mvome=wVgV z6w0gYTTbg;P!e3HTu*l%!LYx?W!Z0a{^5b&@6qQNFEKH}AmpYbcFb-%@>T=qB~ zL|K_83T&J=ATzDR2~2H6EGKy`q6d)iWGwX=$C?K;T7@2^YZ%fs0X+!a$*TcxM{<7z zteRGQqjPrWN4sk4?9Irv)sV-}aw`mnYzTw>Qc-G^<+gC#m6dA@}m zfwFio;&Qrum9e%7i_?9!4}I2#HsB2aq$@8ad;s?y2N$e%AhgSAvka1fX83Yi*;Faf z>w~~3?sHo2^S$}qds&gysP{Z$Hz=?40qSGRfjhm*0_q!f$GBfyPemiX#%cXarQ-oe zgC%RN&O?v6A5m_#JDp~>`6Ywp5{ql$T&ER3Y;{>KqkD1KIu9}*>E|UK$_s8iOzLt9 zN2fAEOFU#aQdtgIyS+Y$uP)LJB07u$%G6<|;t25p=hg~KAH<;Or@;hZAin>l@*}<8 z==_Px_$yb`I7as)z2`>`qd~9y^jCb${hk%7dsKx@b6VF~Tnn7m9*awuXt&#)%A(jJ z|6&Kb+hw;pQa^NAdaTX`F3UP#c06Hm5idi+BMu5=6qoB^w%yL)3)u zkkZqM+r%W-K1il8XRytw7nBFt7t~IQ&SkkbW0vlxEB%O{556F-d*Naw!R}P{{`36N z&TF`E6Ux35aq*Z8q(VU1^gzh8!$Uhya~?*9E8>Dl7Z8|;a0}POBXj|Px#|T~Milvo z5hHvbi;F|09j1pOX9dwO(A80&WcFSic{8a)Nrxjrm~(VGaQk*dly^ex&Z{Gn+0j{d z&B2w;VdYna0{G*%?$-H_`gPxV{a)-%4x#ros_R4HYiW1x667Dmej$o&8wt!~rO36=(&v}vX5oHy;< zVbRsh+HuL;Tf0hbbxw7?P_Vfg$?}Yr8Jpisgm0Z&eCzCsdRkx4FPqY`xO%o;-xTYp znov=d@0yZR)KcA9IzcBl7fvi|jukn@L57`76)MyN7>b`;s&ZlD#VHl-j zB+0JtlS#VD($3U`B@O&zZ?Rfa_aT5ZGz1F~f;jkVt5xZ-dPBvH1O23EAe0A87qS;* z-dl`$GZmxK3!8x#VEZFpjnEy60nQfdM#GnnK9`T~Lu*aY~8?k1Ct7A=n9L)*S1^Z6S}|MbfLs+_L8JNf;) z-j{lQQ)!pntk67=p81c%cATyAmupO>UQ);mow_U#fc-LT=% zp$!{^BdHBUUPjitmg*fHt~WWclb$jyHfGhEB5kv4CVpu`A!M6K!wH^l5XaB$hd@MOne@J~kTz}he{YTgG z%~ngoY}(?Q~7SwhjG$#s=VHUVbG# z*W1YpI0_m?>9N6Go_Wki;jlvrnm8P!=+1@+76Nh-s3(StCIpn-$kIYiB$TH`p18QV zwym?HdUEPpXQ=eYfyS<#liDi$&bZAUjm=+U7d&&yHe7z_+}(HQE2Z}`B;$0p&F$O$ zhw&SxZJSZQ@N{)+qSWXb$;1ywm6#>KAqY& zG~b8n-oQPehwJ|3bZ%7jTwm54U!(4?W!LYSFKGxVUHO6Up04(TqpK;`oVGoOf=rBr;tR(Q zFcbo$NG~Bz1f$VlAl3^l4%9OUv=0ShQg4GztZ+DNaYIw$vZ5J|iMKDBxjPbw73KJQ zsyf2XfWe?M<+@#giq6Wg4PK)zCsL2g`F+Yl6YB*+vO>!E^f*9$7YljYW;329|xpY(4Z~IkAk-a z_kT%`<a&mRQ33CieiDt?wN~jpXiuTbXlUw5VtuT6{47FiPWD} zXf56z54A3ywax1GYoo<8WB&Y>;_3pA%iU5IFNwA|!;2Ez1RIddD5 zpvM!esmk*_-rmk3tlPCFyq*0!TTS?vJE{>C@<3rt%?Fc}CG6hGdzI^p%X959R;c{L zFW3s0fAis5Psx}f_R*ciC7ve?c~-BpI2LTav^f}yB* zw`4l64x^)v##4Q?F2V;4LfKF0Sm=c@+#rZm^UT0HZHNyML~#=J36U|(%W6b)I^y=? zHLlFqBSwX&k`Dm=r;bqZ#kkMw^~KrTv(6f9+Niv+el-g%S(1-r$!v+s>7Kh3WUb=SV7$E}o|_k+G!=r1km_ByP4h*e2z|Du1+f`E#9t#`?EY>&G@U1m{_5j75_ct(zUKsfo@$hFx7S zXb^w$#-vGaOinHOa7S~O*5lE3HE;Qtj&*Lg4#$!ehVj2M+q8r0<||)JerOJ!j&(iM zMK77FSQ^@*{u*{rxjrm-OW7Xi?70uov{HB-K0wOWeAIp#7Epm2OFQ*I9m#!Qc9L?LMM6-_~5IBd5eL>>xz!Dh2>nDYC2q;k`h4j$2TQn}&R8lLb0XJ$;z-}7dnRF zXk8b)N`vHOY>+(66W7&2?#I6dkHHL~`(x$1idQaEypXAVH?W0Jcq~fIVG9+f@;$kN z%~gEL{cI8Yi}F3iDYh!FDt}_*mG?F&zr~GMh&Oe!T=-rJ%6rnUl|L!3F{|;M8&)FtB&u3$(+9(5rL zeQ&B&e2fj;7-1KRy@S7oB`-C8uJAxSwczK%IWtp7+2icmi!c9O?WyJI)iX9N)3`t&5qhuVZ}bfXQ_d6Wmn(Hj-SQs6$OcCFe~E{c zSNerVQ!{%RQc0Z}$2?oURDJ>a2#Qo}*Q~>LywK8gdB6{ zI-KTa$Hr}Cxff1an$+uW5iSZw4Eo9{ov|>G8!_nea`pPipfj+hz0*CmQgrCug>{kc zXYGa?Z`2kxicj6E`15OX9eZQJE#|y2!CFK03%ehj8Ys`tx0x!O(M1(A+-)S}r)_$A zPSKkn>#rwD3i~Jc)cOV<8qUMsU1&kHuRxhP>%r-|YLO!ugvtih7XGJ(g;QfZh9nGX zTjz_oE|Co2JcZ%vnp;%LO5^jV=@%c^APNoTldpTi-5xKy?f$Y@yT?*dnE(76;iBqB zlWeAA}+2W*vheDP>uzU>Nwqjbx!6`)(hN^2y&w@AzMTBl|GqfC68WyRSv zTDY~e!s}k|MAnyy=b4waS1ooI%wHiR zR;+SO*dYA0&f5?kA2b)*++*`QuK9V9TdiA478xtCrU2s8@5c*YM(b=09mCHJ1@nGsier+8RNM_s5)r_@qsMz3X54#jO zO6V}k!D!L9+F&Rix#CG%+RB=XYIBT?!P#8TH8_uXh1Ae{ zJa!9PPH$(cERxGL5TZ9p{V_Yk%ax=ZuS6duGy}ktm-#!nb_N?L@j$xCl*xf8bQ&tb zs6q+-(4O=Ue`BSU*MPrMqZ!clrQb=qGO|VuX@Q^v0biu;qautdm9QU80m#PeDxiVz zPINK+wYQ=@V?2T|Ehdq46DbrCQlWCO#3yq}3co{E2Q!QV{0}+^!sc^(<*o7gmnN&0 zE}YOhXHLy6H{Gyx%Y#$b_Y{_|Tsvjg^4i+jkqHNtck}Yc*Vjke#p%-?W=K}ZChXbs zY$y~i#EJZm_YNP*&o3;TP?Tt|S-$n+=cS8Ur%xYW?=)#|+O%dj}Y2cf50B^IwAE*J?a7%H$n!K~LZYjM7mNR)%s_Yy>`N5E)J4qi2F%m5mt0SXM zor8iF$!i_X0rdssLj)>@K}s`2eHL0O_PdbJ7xJ>>A+I;&8yqNUXePj6Y+ zagV{+%!dJw&b6`L}!0ew}}ejR(4avb31oF*RbEB)0z*IlpHW?b(YjknWsvdo3V~E zB_*HGGT6F+6Ap(^H!EUQYzq4X0~(Bn7Q><1r;X`QDHbETqXP#FrGwZ49PHY78<5*U zyCFn_R@09-Qdhbd$T*$Q!iitJa15%$0*IWB5o8mJD``SvG&-#UCyDqBU1_L?Ng9u-|Fl@2J@r^%K(Fvh zd`&GVw~N-(5>(R$KAy_s@%pNDT8NZXBLEGcO7(H%#-u9afA@HX6X*e~5JT`uFR{>Y zn9CQaFjQ(<;fXf`k>quU4IS^NCcv$TGUNrs+ww)2H}FO(BWbhftyB|~y$$E6bpy_+ zX!Udx|32=;qRHQk*P?}}QPVF@w{yNM+-x!+(XYHrvKbKai%;b4nbs!f?=Q5d^K)q_c>*v+KQ{60gYe^DIu^Y-DlP>OCO|iN<89s6sB5-1iym zVnM#X#99%TELtYIjTIMMR^~IA1$IuHmQqk!)UO2X++$4eUIrDYM5*l-#XEjSgZC89k-G-uZlYm!MxT;}^4XlRA7!1}I zI)hGwRq)1~cDKvecvf+9YiHe9Q#=$7i&kc}1?)j-4RbLqs={od$)Z)}GCg3g^hSZ% zjmQXw?iQ3=oqk(R(4J>3)RoF(&vU!S-?gJykjgKrh_@8Lzo2byev#KRp-?X(!((+V z6DQ`l5Obc8^NT$OQNPz_5GCC>sHw&k*vbk7(PUtGE^j_7DUxhfvyWK=vfgKdQ;CC_ z4Gx1o1Lsn5+Ry!f?_|MvDg$BRfn@5?$*VcEqudChi{8_t8JuEL+au=n9WyJQ>hX-0cA?0Vv5w^Ii`i6tMV^PVu?t+UC z_Jvr5_|6+YT{LF%je~#3f-cN{`tupH_ivwc(Ucb3d*WecaJNt2GbzUfQ)gIyT1EoU{ZaHM=AW^5oXRwjO)y;E7AHeyucdjWZ{ME*T3>ghR@-?jcpVW z4%#ik>kNU!upGeGg5pOZSRdDV7aoP@*b`%$t1uDmFd9b@9xw$X!Fvvp}p)LP`Vx{KpAq4M%jOZl?>(aAdx9euaUzWIktzOHj-&p!1;8K4uifv71v zxkq{zEKdX;X&q<iHx{LsP1vHhsl2%Uo}rJUj=3MGkJPp&f=ZD$f-9aT6N&ma|WE9lS}3`i%E zWc!h^?UOXb>krbFT`MH%gxg3(>+nr6DiiV5P;|-tzzYOA47cpS1<2!~fyF(}ha?OP zCRZK2gor~V;Q(44@bQ^A8UT9~*W~@F{NDyd5KXM;t(XY=i{anpf6A*VZUm5O=Q@^L z*9nX#rF;K>?BD+%489hnY{3C#jm-%F>`yBuPOJbxXuxS>w;fO(C~Yjx^Rwi}jY`rl zcGCm<)v^MgqaRsv$m2H6=t9H98Q#%*m|9_C%aji}M!Fgk6PHcoe>es}CqOTieqI_e zL8(lDuirhmg_q%m{?>(KDqv)h7LOt@AF{W-)4B@+;8u!@a|>CZpnID4+SAa8 zIAn{r5x{RF^mvV$_zVOAd10dzbdcbSG(o&&&|Bglk$({OX25Tg|;TTMr2LPDIhXlMtOEup548^h_lH& zdpLXsaRSVokLw$sP=5Yc&(BUGL~Gw6ESRz7%4PkxQ>xbO&oSpW%N)+|!lj2#+<5+Z zV+yRgzo0htPxRf>qI~aH`v4%g`!Md!?(N@XzL)lBg)w6aX1%)o#uJBYoCVfm z%xP6etlEi7sWZ=W=&_a)%K)2*AEzC$IqMksX+b5TtF^8 zCeAnp+)~%E{(v$$mHYuS{y;!#;|F%V4*!0a>p9szCWJiKgUMh#Zn3@!$JaXdpSJZP zG?B&B2i4aozY#Q-{on_f;3rR>9Ms(?b!slh2_y$qj`P(N2;c?;2zs(MhSd=oOv&el zBLy;^Lg_TF<%rZL)90}qXzEKUKL|+0(0)N8o&hHvG!7m#9E*o@Jk~6Y>%8{*S`*Vzu zO+DXe(Tb9-ggMP#S+?ulwKjWReQ9y7MbJ78Mp>}xv^gynr^8eCA9L&6LGbtB>9r24 z-dR}E7Hz3SJPw2jw~>Y7)mriM#QUMT)dgdUJ*_Cj{=LCh6WaZLWAU}UO#2PHSJt|~Z%U%cQ@t@auVrynuFUjBO+B5(6D{UKgWz?U z0s=G3j)HJg?UIIr&|kU0wqnGf}-tM60fc zLFj^rFb=Z64&rfe53-SSQXKQZvz^!aF)mG?3lAdk0gb8I!C@W|MBua zZr(Vjvhwu}n^!{U)4{)6&ctD%>%!+&5=7MphH$4W|hU-{=-`>syj&z4M^P%de$ zHm&yRUsjZt3$oQ{9=EJx$NU_ZzSM_;xfhT3mq>EJ-@+Cws)-w_>jV1SqPDgN7v+vM z7v%2#$6(=Pn>7$FoD>S)W(mpwGAppkrsZq9iwd7!arUxc-s3IZH%_+tK02)KuI;#P ze@|Qct|vEbXHxS1%cmu-x0*2wgyz=q+bvcA&^epd3oDlIZp7D7hVk7NeBD1rw#@EM zZ4U;V)xo)sbxf*rY6}`GwE=)z4D%P;pdoR=|5rod{c#BKVBH-E{-*@TMaXsxV(CB> zq;&2B&prFV!Dk91&nUO0UV0qv-%{PTb1CTa?Yw>G5-(P zq+g~=ln;KjiX9zff6o71Tl*U?XtfuqamLgf}h8+_! zlC`pa@rp}3gm~+$1@mV#I~=}ht$%vgt{vC1?|1EJ4T;wL9Ha3)JoTb+7K z*|fd$D&3J;Gs^b&GEop6d5zPyPtJ9?#x#!~UuCmj)Twn(nzm)@H#%}UyUtoXZ*o2S z2bKnOzVUTU1%hwZC39QzotQu34Oi-X%@r}B3OYd#e2f1Idnb8lyLsFa=dz#`Bt{l0 zIS2hk;U1$@ z=9>2Q`MY*y@tQf{maua2xEoOXk&0MI2F!bgpeZStP70bySg9rjz5mMssDx`zlNhVx}YahO#7#<^d#4EZ}yi;amYUh-ua{OPE5mK`&9DipuUmut@kU+&S= zg9`XKO9n2@*?@Hbs6Y@)S=7g=k%*B_-Vul&gsK{r23OdF$OMEGh$q)JDX;zDcIE%l z_TGU}Rq6ZqoO|!|$@H3OnM_SDlgXrKQbEgJ$m(ai8JT)aaqXnp^?q^(KSxXc5Yl}_x?VZ*!3{)y@L`f!wYB)e z?H~l&@_y>lIC2ra@3FE#9n%ZFN#{UX~*}%i@$PSy=w^ z?4=FGw}rF@m8q^kr^INX^Z87fm06?Gx2~Ff`T3qYcI)W88Y64SjE*jl=C%|~7;Z|- zwT`Tr1v{NTCW9ok$03#Z7#I?r`iy8w?#|ueX{jocskLVZ2s{FPh%&xwRlg?=V>BER z)E7Z@X(PiWRXRakq53lr>4Vpk$ZaRo0~*;O6`KZDbj37fFSKtn7k`pJ{`(%a{x7UV zAy2V1tU zQeJuoq+8e^-4~7C{zZM^O#dsIJLwaO%iK!BXK z#o{+Dyo<_GO1PtXbOUTkLb?@5$%i4rJyd zmo~6M6Yw2Dn~}M z56(H5YOZLHX5Sb|?f?+0ST>qgj@)80SB$R6zH!cBYhNEJp2NSy{4}z1il_VzQ)>B` z;+)&&9=2NO%B>N3TP02!A*IE#k@WPDLsm=0=;EB7IX$#WH2dbLWJGz+P)#xaT#1Z7 zJ%^N2>ViRYF~!hBW2bL{P8(>n0_+OB(sY=ScuNtwhd~Gb`cX3j1|k?rX?u_qR*9qj zDl!<1!h-T4{rSk$+S;kPzt2-;DoR3ZEL0NB=<5xYRQmHC4zdol!(cTTO;!WeSfcb+ zpO0BNbCMkO8qFJhLx!ZSNs|R+d<%>o%#4h(l8}FdEp2HkV}Qk6Ar>p}V_@#LjG)hj zkJ=v_Ax3L%6paKQ;}Wn4V8RYC0%IjBIFSOHqc!C4^~NwV7hd{vm{2? zAC*`MzAYm)z}6{BgV9n8ze*a6nOc3ZD9u-l?Eta}NU&|*R7Vy)_aCuLtdZHd7XGu` zOoQ5Bcy-t&l}>`}8f~lZDU!P$zSq`Ik zu)@)q0?&LID`q@SqJWo5r8lUFjDL)mu|NSNOM9M}+dVR>vKs6fm&zxecOtPyBF;|Z z+V6k%P5#hK=JvbhWimzQUARTKnNyEm_A#lv;2!Y)sqHQ<#HQ#edjrvl13ubad{L8x zGZ{IHju`y#$wfE|SH*wz5r5^|eDM`4it>yXt0QdWEJ9jT;Xqc3=79 z;naHrC$Bp2iA&rDR^hcvI~tt#de-;1VUdsvN(B#mK4k_ldHb6%*c6bX8lLU5{{?AH z7|Mj?!h$%<_OiY44997OBO^{kM1)21U%4aW6n2zLu<{dDBqBZzu?GwtKZ_FRJm>x= z=|X$42mAYNr560Xph0*b!@uZSAL`nhL` z^O+t_#U++!l}M_~${2-Q)2opyn6k1O;bSgj$I|YVu%U$k4#+>t@SxWk_B~ z_#Qm}0^k{tv6W(Dh#>%HhXG8Z)HeckO%Jz7l&%)2F&45DQmV2tVksg1=LfpV3bX2~ zcRrozzov6_UU8(P%n|brSL|l$5|v6N^Xw4vJPGa4Xcm2eJFEQk+E>S_)xl|Hm*{?? z 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 diff --git a/feedme/resources/css/fonts/fontawesome-webfont.woff b/feedme/resources/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 8b280b98fa2fa261aa4b0f8fd061f772073ef83e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71508 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 diff --git a/feedme/resources/icon-error.svg b/feedme/resources/icon-error.svg deleted file mode 100755 index f6105c13..00000000 --- a/feedme/resources/icon-error.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feedme/resources/icon-info.svg b/feedme/resources/icon-info.svg deleted file mode 100644 index 4e9be54c..00000000 --- a/feedme/resources/icon-info.svg +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/feedme/resources/icon-license-invalid.svg b/feedme/resources/icon-license-invalid.svg deleted file mode 100644 index 0253dbc3..00000000 --- a/feedme/resources/icon-license-invalid.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - -plugin-icons -Created with Sketch. - - - - - - - - - - - - - - - - - - - - diff --git a/feedme/resources/icon-license-registered.svg b/feedme/resources/icon-license-registered.svg deleted file mode 100644 index 5700e6d1..00000000 --- a/feedme/resources/icon-license-registered.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - -registered-icon -Created with Sketch. - - - - - - - - - - - diff --git a/feedme/resources/icon-mask.svg b/feedme/resources/icon-mask.svg deleted file mode 100644 index 04cab37a..00000000 --- a/feedme/resources/icon-mask.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/feedme/resources/icon-success.svg b/feedme/resources/icon-success.svg deleted file mode 100755 index 2301da3d..00000000 --- a/feedme/resources/icon-success.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feedme/resources/icon.svg b/feedme/resources/icon.svg deleted file mode 100644 index fcbdb29a..00000000 --- a/feedme/resources/icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/feedme/resources/js/FeedMe.js b/feedme/resources/js/FeedMe.js deleted file mode 100644 index 7c51d986..00000000 --- a/feedme/resources/js/FeedMe.js +++ /dev/null @@ -1,217 +0,0 @@ -$(function() { - - // Toggle various field when changing element type - $(document).on('change', '#elementType', function() { - $('.element-select').hide(); - $('.element-select-' + $(this).val()).show(); - }) - - $('#elementType').trigger('change'); - - // Toggle the Entry Type field when changing the section select - $(document).on('change', '.element-parent-group select', function() { - var sections = $(this).parents('.element-sub-group').data('items'); - var entryType = 'item_' + $(this).val(); - var entryTypes = sections[entryType]; - - var currentValue = $('.element-child-group select').val(); - - var newOptions = ''; - $.each(entryTypes, function(index, value) { - if (index) { - newOptions += ''; - } - }); - - $('.element-child-group select').html(newOptions); - - // Select the first non-empty, or pre-selected - if (currentValue) { - $('.element-child-group select').val(currentValue); - } else { - $($('.element-child-group select').children()[1]).attr('selected', true); - } - }); - - $('.element-parent-group select').trigger('change'); - - - // Update the Primary XML Element - if not already set - $(document).on('change', '#feedType', function() { - // Don't do this if edit the field... - //if ($('input[name="feedId"]').length == 0) { - $('#primaryElement').html(''); - - if ($(this).val() == 'rss') { - $('#primaryElement').val('item'); - } else if ($(this).val() == 'atom') { - $('#primaryElement').val('entry'); - } else { - $('#primaryElement').val(''); - } - //} - }); - - // Add an attribute to the Primary XML Element when typed in manually. This helps to prevent the above - // triggering disrupt what the user has manually entered - $('#primaryElement').keypress(function() { - $(this).data('manual'); - }); - - // For field-mapping, auto-select Title if no unique checkboxes are set - if ($('.feedme-uniques').length) { - var checked = $('.feedme-uniques input[type="checkbox"]:checked').length; - - if (!checked) { - $('.feedme-uniques input[type="checkbox"]:first').prop('checked', true); - } - } - - - // For Assets, only show the upload options if we decide to upload - $('.assets-uploads input').on('change', function(e) { - var $options = $(this).parents('.field-extra-settings').find('.select'); - var $label = $(this).parents('.field-extra-settings').find('.asset-label-hide'); - - if ($(this).prop('checked')) { - $label.css({ opacity: 1, visibility: 'visible' }); - $options.css({ opacity: 1, visibility: 'visible' }); - } else { - $label.css({ opacity: 0, visibility: 'hidden' }); - $options.css({ opacity: 0, visibility: 'hidden' }); - } - }); - - // On-load, hide/show upload options - $('.assets-uploads input').trigger('change'); - - // Selectize inputs - $('.feedme-mapping select').selectize({ - allowEmptyOption: true, - }); - - - - - // Allow multiple submit actions, that trigger different actions as required - $(document).on('click', 'input[data-action]', function(e) { - var $form = $(this).parents('form'); - var action = $(this).data('action'); - - $form.find('input[name="action"]').val(action); - $form.submit(); - }); - - // A nice loading animation on the success page for feeds - new Craft.FeedMeTaskProgress(); - -}); - - -(function() { - -var feedMeSuccessHtml = '
' + - Craft.t('Processing complete!') + - '
' + - '
'; - -Craft.FeedMeTaskProgress = Garnish.Base.extend({ - runningTask: null, - - $spinnerScreen: null, - $pendingScreen: null, - $runningScreen: null, - - init: function() { - this.$spinnerScreen = $('.feedme-status-spinner'); - this.$pendingScreen = $('.feedme-fullpage.fullpage-waiting'); - this.$runningScreen = $('.feedme-fullpage.fullpage-running'); - - this.updateTasks(); - }, - - updateTasks: function() { - Craft.postActionRequest('tasks/getTaskInfo', $.proxy(function(taskInfo, textStatus) { - if (textStatus == 'success') { - this.showTaskInfo(taskInfo[0]); - } - }, this)) - }, - - showTaskInfo: function(taskInfo) { - this.$spinnerScreen.addClass('hidden'); - - if (taskInfo) { - this.$runningScreen.removeClass('hidden'); - - if (this.runningTask) { - this.runningTask.updateStatus(taskInfo); - } else { - this.runningTask = new Craft.FeedMeTaskProgress.Task(taskInfo); - } - - if (taskInfo.status != 'error') { - // Keep checking for the task status every 500ms - setTimeout($.proxy(this, 'updateTasks'), 500); - } - } else { - if (this.runningTask) { - // Task has now completed, show the UI - this.runningTask.complete(); - } else if (this.$pendingScreen.hasClass('cp-triggered')) { - // If this case has happened, its often the task has finished so quickly before an Ajax request - // to the tasks controller has a chance to fire. But, we track when the user submits the 'run' action - // through a flash variable. Technically, its finished - otherwise we end up showing the 'pending' - // screen, which is a little confusing to the user. Simply show its completed - this.$runningScreen.removeClass('hidden'); - - this.$runningScreen.find('.progress-container').html(feedMeSuccessHtml); - } else { - // Show the pending screen, there are no tasks in queue, and a task isn't currently running - this.$pendingScreen.removeClass('hidden'); - } - } - - } -}); - -Craft.FeedMeTaskProgress.Task = Garnish.Base.extend({ - progressBar: null, - - init: function(info) { - this.$statusContainer = $('.feedme-fullpage.fullpage-running .progress-container'); - this.$statusContainer.empty(); - - this.progressBar = new Craft.ProgressBar(this.$statusContainer); - this.progressBar.showProgressBar(); - - this.updateStatus(info); - }, - - updateStatus: function(info) { - this.progressBar.setProgressPercentage(info.progress * 100); - - if (info.status == 'error') { - this.fail(); - } - }, - - complete: function() { - this.progressBar.setProgressPercentage(100); - setTimeout($.proxy(this, 'success'), 300); - }, - - success: function() { - this.$statusContainer.html(feedMeSuccessHtml); - }, - - fail: function() { - this.$statusContainer.html('
' + Craft.t('Processing failed. View logs') + '
'); - }, - -}); - -})(); \ No newline at end of file diff --git a/feedme/resources/js/FeedMeHelp.js b/feedme/resources/js/FeedMeHelp.js deleted file mode 100644 index a3a3f04f..00000000 --- a/feedme/resources/js/FeedMeHelp.js +++ /dev/null @@ -1,93 +0,0 @@ -(function($) { - -Craft.FeedMeHelp = Garnish.Base.extend({ - widgetId: 0, - loading: false, - - $widget: null, - $message: null, - $fromEmail: null, - $attachLogs: null, - $attachDbBackup: null, - $attachAdditionalFile: null, - $sendBtn: null, - $spinner: null, - $error: null, - $errorList: null, - $iframe: null, - - init: function() { - this.widgetId = 'feedMeHelp'; - - Craft.FeedMeHelp.widgets[this.widgetId] = this; - - this.$widget = $('.feedme-help-form'); - this.$message = this.$widget.find('.message:first'); - this.$fromEmail = this.$widget.find('.fromEmail:first'); - this.$attachLogs = this.$widget.find('.attachLogs:first'); - this.$attachAdditionalFile = this.$widget.find('.attachAdditionalFile:first'); - this.$sendBtn = this.$widget.find('.submit:first'); - this.$spinner = this.$widget.find('.buttons .spinner'); - this.$error = this.$widget.find('.error:first'); - this.$form = this.$widget.find('form:first'); - this.$form.prepend(''); - this.$form.prepend(Craft.getCsrfInput()); - - this.addListener(this.$sendBtn, 'activate', 'sendMessage'); - }, - - sendMessage: function() { - var iframeName = 'iframeWidget' + this.widgetId; - - if (this.loading) return; - - if (!this.$iframe) { - this.$iframe = $('