diff --git a/README.md b/README.md index fba4738..4b9064d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # CFI -![Version](https://img.shields.io/badge/VERSION-1.0.9-0366d6.svg?style=for-the-badge) +![Version](https://img.shields.io/badge/VERSION-1.0.10-0366d6.svg?style=for-the-badge) ![Joomla](https://img.shields.io/badge/joomla-3.7+-1A3867.svg?style=for-the-badge) ![Php](https://img.shields.io/badge/php-5.6+-8892BF.svg?style=for-the-badge) diff --git a/README.ru.md b/README.ru.md index f21c55a..0499975 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,6 +1,6 @@ # CFI -![Version](https://img.shields.io/badge/VERSION-1.0.9-0366d6.svg?style=for-the-badge) +![Version](https://img.shields.io/badge/VERSION-1.0.10-0366d6.svg?style=for-the-badge) ![Joomla](https://img.shields.io/badge/joomla-3.7+-1A3867.svg?style=for-the-badge) ![Php](https://img.shields.io/badge/php-5.6+-8892BF.svg?style=for-the-badge) diff --git a/cfi.php b/cfi.php index 237eb18..32f0b3c 100644 --- a/cfi.php +++ b/cfi.php @@ -56,7 +56,7 @@ private function _initConstruct($ajax = false) return; } - if (!$ajax) { + if ($ajax) { $option = $this->_app->input->get('option'); $view = $this->_app->input->get('view'); if (!($option == 'com_content' && (in_array($view, ['articles', 'featured', ''])))) { @@ -336,9 +336,7 @@ private function _importData() Table::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/tables/'); Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_content/models/forms'); - //Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_content/model/form'); Form::addFieldPath(JPATH_ADMINISTRATOR . '/components/com_content/models/fields'); - //Form::addFieldPath(JPATH_ADMINISTRATOR . '/components/com_content/model/field'); set_time_limit(0); @@ -348,7 +346,7 @@ private function _importData() // check count columns if (count($fieldsData) != count($columns)) { - $errors[$strNum] = Text::_('PLG_CFI_IMPORT_COLUMN_EXCEPT'); + $errors[$strNum + 1] = Text::_('PLG_CFI_IMPORT_COLUMN_EXCEPT'); $continues++; continue; } @@ -374,30 +372,31 @@ private function _importData() $model = BaseDatabaseModel::getInstance('Article', 'ContentModel'); $article = []; + $isNewArticle = true; + $state = 1; if ($articleData['articleid'] > 0) { - // load existing article item - //savefile("d:\cfi_1.txt", $model); $article = $model->getItem((int)$articleData['articleid']); - //savefile("d:\cfi_2.txt", $article); - if (!$article) { + if (!$article->id) { unset($article); - $errors[$strNum] = Text::sprintf('PLG_CFI_IMPORT_LOAD_ARTICLE', $articleData['articleid']); - $continues++; - continue; - } + $state = 0; + $errors[$strNum + 1] = Text::sprintf('PLG_CFI_IMPORT_LOAD_ARTICLE', $articleData['articleid']); + } else { + $isNewArticle = false; + $article = (array)$article; + unset($article[array_key_first($article)]); + if (isset($article['tags'])) { + $article['tags'] = explode(',', $article['tags']->tags); + } - $article = (array)$article; - unset($article[array_key_first($article)]); - if (isset($article['tags'])) { - $article['tags'] = explode(',', $article['tags']->tags); + // set new data on existing article item + $article['title'] = $articleData['articletitle']; + $article['introtext'] = $articleData['articleintrotext']; + $article['fulltext'] = $articleData['articlefulltext']; } + } - // set new data on existing article item - $article['title'] = $articleData['articletitle']; - $article['introtext'] = $articleData['articleintrotext']; - $article['fulltext'] = $articleData['articlefulltext']; - } else { + if ($isNewArticle) { //set data on new article item $article['id'] = 0; $article['title'] = $articleData['articletitle']; @@ -408,7 +407,7 @@ private function _importData() $article['language'] = $articleData['articlelang']; $article['created'] = Factory::getDate()->toSql(); $article['created_by'] = explode(':', $this->_user)[0]; - $article['state'] = 1; + $article['state'] = $state; $article['access'] = $this->_app->get('access', 1); $article['metadata'] = json_decode('{"robots":"","author":"","rights":"","xreference":""}', true); $article['images'] = json_decode('{"image_intro":"","float_intro":"","image_intro_alt":"","image_intro_caption":"","image_fulltext":"","float_fulltext":"","image_fulltext_alt":"","image_fulltext_caption":""}', true); @@ -419,19 +418,27 @@ private function _importData() // save article item if ($model->save($article) === false) { unset($article); - $errors[$strNum] = Text::_('PLG_CFI_IMPORT_SAVE_ARTICLE'); + if (!empty($errors[$strNum + 1])) { + $errors[$strNum + 1] .= '. ' . Text::_('PLG_CFI_IMPORT_SAVE_ARTICLE'); + } else { + $errors[$strNum + 1] = Text::_('PLG_CFI_IMPORT_SAVE_ARTICLE'); + } $continues++; continue; + } else { + if (!empty($errors[$strNum + 1])) { + $errors[$strNum + 1] .= '. ' . Text::_('PLG_CFI_IMPORT_SAVENEW_ARTICLE'); + } } - if ($articleData['articleid']) { - $updates++; - } else { + if ($isNewArticle) { $inserts++; - } - // reload article from model - $article = (array) $model->getItem(); + // get ID for the new article + $article['id'] = $model->getState($model->getName() . '.id'); + } else { + $updates++; + } // get article custom fields $jsFields = FieldsHelper::getFields('com_content.article', $article, true); @@ -456,7 +463,7 @@ private function _importData() } } if ($fieldsErrors) { - $errors[$strNum] = Text::sprintf('PLG_CFI_IMPORT_SAVE_FIELDS', implode(', ', $fieldsErrors)); + $errors[$strNum + 1] = Text::sprintf('PLG_CFI_IMPORT_SAVE_FIELDS', implode(', ', $fieldsErrors)); } // destroy article instance diff --git a/cfi.xml b/cfi.xml index 10f3f93..2f56ba1 100644 --- a/cfi.xml +++ b/cfi.xml @@ -1,8 +1,8 @@ PLG_CFI - 1.0.9 - March 2021 + 1.0.10 + April 2021 Aleksey A. Morozov alekvolsk@yandex.ru https://alekvolsk.pw diff --git a/language/en-GB/en-GB.plg_system_cfi.ini b/language/en-GB/en-GB.plg_system_cfi.ini index d092bdc..e0842b1 100644 --- a/language/en-GB/en-GB.plg_system_cfi.ini +++ b/language/en-GB/en-GB.plg_system_cfi.ini @@ -41,13 +41,14 @@ PLG_CFI_IMPORT_NO_COLUMN="There are no required articleid and articletitle field PLG_CFI_IMPORT_COLUMN_EXCEPT="The number of values ​​in the row does not match the number of declared columns" PLG_CFI_IMPORT_LOAD_ARTICLE="Error loading article with id %s" PLG_CFI_IMPORT_SAVE_ARTICLE="Error saving article" +PLG_CFI_IMPORT_SAVENEW_ARTICLE="Article saved as new" PLG_CFI_IMPORT_SAVE_FIELDS="Error saving field values: %s" PLG_CFI_RESULT="Imported records from file: %s
New articles added: %s
Updated articles: %s
" PLG_CFI_RESULT_ERROR="Raw file lines: %s" PLG_CFI_DESC_FORMAT_LABEL="Description of the file format" -PLG_CFI_DESC_FORMAT="

Description of the file format of the imported materials with additional fields

+PLG_CFI_DESC_FORMAT="

Description of the file format of the imported articles with additional fields

File format for imported data: CSV. Default a file encoding, if the option «Convert encoding…» is not set: UTF-8 w/o BOM. The data separator in the CSV file must be only the ; symbol.

The first line of a file is always the file field headers.

Reserved field names:

diff --git a/language/ru-RU/ru-RU.plg_system_cfi.ini b/language/ru-RU/ru-RU.plg_system_cfi.ini index 920f75e..a7f58bc 100644 --- a/language/ru-RU/ru-RU.plg_system_cfi.ini +++ b/language/ru-RU/ru-RU.plg_system_cfi.ini @@ -41,6 +41,7 @@ PLG_CFI_IMPORT_NO_COLUMN="Отсутсвуют обязательные поля PLG_CFI_IMPORT_COLUMN_EXCEPT="Кол-во значений в строке не соответствует кол-ву объявленных колонок" PLG_CFI_IMPORT_LOAD_ARTICLE="Ошибка загрузки материала с id %s" PLG_CFI_IMPORT_SAVE_ARTICLE="Ошибка сохранения материала" +PLG_CFI_IMPORT_SAVENEW_ARTICLE="Материал сохранён как новый" PLG_CFI_IMPORT_SAVE_FIELDS="Ошибка сохранения значений полей: %s" PLG_CFI_RESULT="Импортировано записей из файла: %s
Добавлено новых материалов: %s
Обновлено материалов: %s
" @@ -64,8 +65,8 @@ PLG_CFI_DESC_FORMAT="

Описание формата файла им

При отсутсвии ошибок импорта данных импортируемый файл удаляется, в противном случае файл сохраняется в стандартной папке временных файлов Joomla.

" PLG_CFI_DESC_WARN_LABEL="Отказ от ответственности" -PLG_CFI_DESC_WARN="

Данные дополнительных полей записываются в БД прямыми запросами и не подвергаются какой-либо обработке. -Ввиду того, что в этих данных могут присутствовать теги html-разметки, json-строки или иные строковые конструкции, содержащие специализированные символы, +PLG_CFI_DESC_WARN="

Данные дополнительных полей записываются в БД прямыми запросами и не подвергаются какой-либо обработке. +Ввиду того, что в этих данных могут присутствовать теги html-разметки, json-строки или иные строковые конструкции, содержащие специализированные символы, экранирование данных не производится! Пожалуйста, обеспечьте безопасность импортируемых данных на этапе генерации файла для импорта данных в Joomla.


Разработчик плагина не несёт ответственность за некорректное содержимое импортируемых файлов, которое может вывести из строя ваш сайт.

" diff --git a/layouts/toolbar.php b/layouts/toolbar.php index 99d486c..a1401ac 100644 --- a/layouts/toolbar.php +++ b/layouts/toolbar.php @@ -11,6 +11,6 @@ $title = Text::_('PLG_CFI_BUTTON'); ?>