#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если (ВРег(ЭтотОбъект.ФорматНовостей) <> ВРег("rss"))
И (ВРег(ЭтотОбъект.ФорматНовостей) <> ВРег("atom")) Тогда
ЭтотОбъект.ФорматНовостей = "rss";
КонецЕсли;
ЭтотОбъект.ЛентыНовостей.Очистить();
Если Параметры.ЛентыНовостей.Количество() > 0 Тогда
Для каждого ТекущаяЛентаНовостей Из Параметры.ЛентыНовостей Цикл
Если ВРег(ТекущаяЛентаНовостей.Значение.Протокол) = ВРег("http")
ИЛИ ВРег(ТекущаяЛентаНовостей.Значение.Протокол) = ВРег("https") Тогда
ЭтотОбъект.ЛентыНовостей.Добавить(ТекущаяЛентаНовостей.Значение, , ТекущаяЛентаНовостей.Пометка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЭтотОбъект.ЛентыНовостей.Количество() = 0 Тогда
СтандартнаяОбработка = Ложь;
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = НСтр("ru = 'Файл xml'")
+ "(*.xml)|*.xml";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр("ru='Укажите файл, в который надо экспортировать список лент новостей'");
ДополнительныеПараметры = Новый Структура;
ОписаниеОповещенияПослеВыбора = Новый ОписаниеОповещения("ПослеВыбораИмениФайла", ЭтотОбъект, ДополнительныеПараметры);
ДиалогОткрытияФайла.Показать(ОписаниеОповещенияПослеВыбора);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура КомандаЭкспорт(Команда)
БылиОшибки = Ложь;
Если (ВРег(ЭтотОбъект.ФорматНовостей) <> ВРег("rss"))
И (ВРег(ЭтотОбъект.ФорматНовостей) <> ВРег("atom")) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Выберите правильный формат новостей'");
Сообщение.УстановитьДанные("Формат");
Сообщение.Сообщить();
БылиОшибки = Истина;
КонецЕсли;
Если ПустаяСтрока(ЭтотОбъект.ИмяФайла) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Укажите имя файла, куда сохранить список новостей'");
Сообщение.УстановитьДанные("ИмяФайла");
Сообщение.Сообщить();
БылиОшибки = Истина;
КонецЕсли;
Если БылиОшибки = Ложь Тогда
КомандаЗаписатьНаСервере();
КонецЕсли;
ПоказатьОповещениеПользователя(
НСтр("ru='Экспорт завершен'"),
ОбработкаНовостейКлиент.ПолучитьДействиеОткрытияФайла(ИмяФайла, "КакТекстВ1С"),
НСтр("ru='Список лент новостей успешно экспортирован в файл.
|Теперь в стороннем rss-агрегаторе можно выбрать из меню [Импортировать список лент новостей из OPML файла] и указать полученный файл (при условии, что rss-агрегатор поддерживает эту возможность).'"),
БиблиотекаКартинок.Записать);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура КомандаЗаписатьНаСервере()
ЗаписьХМЛ = Новый ЗаписьXML;
ЗаписьХМЛ.ОткрытьФайл(ЭтотОбъект.ИмяФайла, "UTF-8");
ЗаписьХМЛ.ЗаписатьОбъявлениеXML();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("opml");
ЗаписьХМЛ.ЗаписатьАтрибут("version", "1.1");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("head");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("title");
ЗаписьХМЛ.ЗаписатьТекст(НСтр("ru='Список лент новостей (1С)'"));
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("dateCreated");
ЗаписьХМЛ.ЗаписатьТекст(ПолучитьТекущуюДатуВФорматеRFC822());
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("body");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("outline");
ЗаписьХМЛ.ЗаписатьАтрибут("text", НСтр("ru='Новости 1С'"));
Для каждого ТекущаяЛентаНовостей Из ЭтотОбъект.ЛентыНовостей Цикл
Если ТекущаяЛентаНовостей.Пометка = Истина Тогда
лкИмяФайлаНаСервере =
ТекущаяЛентаНовостей.Значение.Протокол + "://"
+ ТекущаяЛентаНовостей.Значение.Сайт + "/"
+ ТекущаяЛентаНовостей.Значение.ИмяФайла;
лкИмяФайлаНаСервере = СтрЗаменить(лкИмяФайлаНаСервере, "[from]", "last=40");
ЭтотПродукт = ОбработкаНовостейПовтИсп.ПолучитьЗначениеПредопределеннойКатегории("ЭтотПродукт");
ВерсияПлатформы = ОбработкаНовостейПовтИсп.ПолучитьЗначениеПредопределеннойКатегории("ВерсияПлатформы");
лкИмяФайлаНаСервере = СтрЗаменить(лкИмяФайлаНаСервере, "/atom1c/", "/" + ЭтотОбъект.ФорматНовостей + "/");
лкИмяФайлаНаСервере = СтрЗаменить(лкИмяФайлаНаСервере, "/atom1c?", "/" + ЭтотОбъект.ФорматНовостей + "?");
лкИмяФайлаНаСервере = СтрЗаменить(лкИмяФайлаНаСервере, "[config]", "config=" + ЭтотПродукт);
лкИмяФайлаНаСервере = СтрЗаменить(лкИмяФайлаНаСервере, "[platformVersion]", "platformVersion=" + ВерсияПлатформы);
лкИмяФайлаНаСервере = СтрЗаменить(лкИмяФайлаНаСервере, "[filter]", "");
ЗаписьХМЛ.ЗаписатьНачалоЭлемента("outline");
ЗаписьХМЛ.ЗаписатьАтрибут("text", ТекущаяЛентаНовостей.Значение.Наименование);
ЗаписьХМЛ.ЗаписатьАтрибут("title", ТекущаяЛентаНовостей.Значение.Наименование);
ЗаписьХМЛ.ЗаписатьАтрибут("xmlUrl", лкИмяФайлаНаСервере);
ЗаписьХМЛ.ЗаписатьАтрибут("htmlUrl", лкИмяФайлаНаСервере);
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЦикла;
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
ЗаписьХМЛ.Закрыть();
КонецПроцедуры
&НаСервере
Функция ПолучитьТекущуюДатуВФорматеRFC822()
лкТекущаяДата = ТекущаяУниверсальнаяДата();
лкДеньНедели = ДеньНедели(лкТекущаяДата);
Если лкДеньНедели = 1 Тогда
лкДеньНеделиСтрокой = "Mon";
ИначеЕсли лкДеньНедели = 2 Тогда
лкДеньНеделиСтрокой = "Tue";
ИначеЕсли лкДеньНедели = 3 Тогда
лкДеньНеделиСтрокой = "Wed";
ИначеЕсли лкДеньНедели = 4 Тогда
лкДеньНеделиСтрокой = "Thu";
ИначеЕсли лкДеньНедели = 5 Тогда
лкДеньНеделиСтрокой = "Fri";
ИначеЕсли лкДеньНедели = 6 Тогда
лкДеньНеделиСтрокой = "Sat";
Иначе
лкДеньНеделиСтрокой = "Sun";
КонецЕсли;
лкМесяц = Месяц(лкТекущаяДата);
Если лкМесяц = 1 Тогда
лкМесяцСтрокой = "Jan";
ИначеЕсли лкМесяц = 2 Тогда
лкМесяцСтрокой = "Feb";
ИначеЕсли лкМесяц = 3 Тогда
лкМесяцСтрокой = "Mar";
ИначеЕсли лкМесяц = 4 Тогда
лкМесяцСтрокой = "Apr";
ИначеЕсли лкМесяц = 5 Тогда
лкМесяцСтрокой = "May";
ИначеЕсли лкМесяц = 6 Тогда
лкМесяцСтрокой = "Jun";
ИначеЕсли лкМесяц = 7 Тогда
лкМесяцСтрокой = "Jul";
ИначеЕсли лкМесяц = 8 Тогда
лкМесяцСтрокой = "Aug";
ИначеЕсли лкМесяц = 9 Тогда
лкМесяцСтрокой = "Sep";
ИначеЕсли лкМесяц = 10 Тогда
лкМесяцСтрокой = "Oct";
ИначеЕсли лкМесяц = 11 Тогда
лкМесяцСтрокой = "Nov";
Иначе
лкМесяцСтрокой = "Dec";
КонецЕсли;
Результат =
лкДеньНеделиСтрокой + ", "
+ Формат(лкТекущаяДата, "ДФ=dd") + " "
+ лкМесяцСтрокой + " "
+ Формат(Год(лкТекущаяДата), "ЧЦ=4; ЧДЦ=; ЧГ=0") + " "
+ Формат(лкТекущаяДата, "ДФ=HH:mm:ss")
+ " GMT";
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПослеВыбораИмениФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ТипМассив = Тип("Массив");
Если (ТипЗнч(ВыбранныеФайлы) = ТипМассив)
И (ВыбранныеФайлы.Количество() > 0) Тогда
ИмяФайла = ВыбранныеФайлы[0];
КонецЕсли;
КонецПроцедуры
#КонецОбласти