Научная статья на тему 'Автоматизация составления рабочих программ учебных дисциплин'

Автоматизация составления рабочих программ учебных дисциплин Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
465
59
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВЕБ-ПРИЛОЖЕНИЕ / MVC / PHP / PHALCON FRAMEWORK / PHPWORD / WEB APPLICATION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Сафонов Е. И., Чернавский А. Ю.

В статье приводится описание автоматизации процесса составления рабочих программ учебных дисциплин преподавателями Югорского государственного университета. При составлении рабочей программы профессорско-преподавательский состав заполняет документ вручную в соответствии с учебным планом, при этом всегда есть риск неправильного заполнения, ошибок и прочих недочетов. Автоматизация составления рабочих программ позволит заполнить большинство динамически изменяющихся полей автоматически, при этом в программе будет проверяться корректное заполнение данных, такое, как распределение часов нагрузки из учебного плана по выбранной дисциплине. Для автоматизации описанного процесса было принято решение разработать веб-приложение. Авторами приводится обзор аналогов. Проведено исследование процесса составления рабочих программ. Определен список полей, подлежащих автоматизации. Проведено исследование базы данных Югорского государственного университета. Приводится описание используемых при разработке веб-приложения технологий и языков.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Сафонов Е. И., Чернавский А. Ю.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

AUTOMATION OF COMPILATION OF WORKING PROGRAMS OF EDUCATIONAL DISCIPLINES

The article describes the automation of the process of compiling work programs for academic disciplines by teachers of Yugra State University. When drawing up a work program, the teaching staff fills in the document manually in accordance with the curriculum, while there is always a risk of incorrect filling, errors and other shortcomings. Automation of work programs will allow you to fill in most of the dynamically changing fields automatically, while the program will check the correct filling of data, such as the distribution of hours of work from the curriculum for the selected discipline. To automate the described process, it was decided to develop a web application. The authors provide an overview of analogues. A study of the process of compiling work programs. A list of fields to be automated has been defined. A study of the database of Yugra State University. The description of the technologies and languages used in the development of the web application is given.

Текст научной работы на тему «Автоматизация составления рабочих программ учебных дисциплин»

ВЕСТНИК ЮГОРСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА

_2019 г. Выпуск 2 (53). С. 33-40_

DOI: 10.17816/byusu20190233-40 УДК 004.42:378

Е. И. Сафонов, А. Ю. Чернавский

АВТОМАТИЗАЦИЯ СОСТАВЛЕНИЯ РАБОЧИХ ПРОГРАММ УЧЕБНЫХ ДИСЦИПЛИН

В статье приводится описание автоматизации процесса составления рабочих программ учебных дисциплин преподавателями Югорского государственного университета. При составлении рабочей программы профессорско-преподавательский состав заполняет документ вручную в соответствии с учебным планом, при этом всегда есть риск неправильного заполнения, ошибок и прочих недочетов. Автоматизация составления рабочих программ позволит заполнить большинство динамически изменяющихся полей автоматически, при этом в программе будет проверяться корректное заполнение данных, такое, как распределение часов нагрузки из учебного плана по выбранной дисциплине. Для автоматизации описанного процесса было принято решение разработать веб-приложение. Авторами приводится обзор аналогов. Проведено исследование процесса составления рабочих программ. Определен список полей, подлежащих автоматизации. Проведено исследование базы данных Югорского государственного университета. Приводится описание используемых при разработке веб-приложения технологий и языков.

Ключевые слова: веб-приложение, MVC, PHP, Phalcon Framework, PHPWord.

E. I. Safonov, A. Yu. Chernavskiy

AUTOMATION OF COMPILATION OF WORKING PROGRAMS OF EDUCATIONAL DISCIPLINES

The article describes the automation of the process of compiling work programs for academic disciplines by teachers of Yugra State University. When drawing up a work program, the teaching staff fills in the document manually in accordance with the curriculum, while there is always a risk of incorrect filling, errors and other shortcomings. Automation of work programs will allow you to fill in most of the dynamically changing fields automatically, while the program will check the correct filling of data, such as the distribution of hours of work from the curriculum for the selected discipline. To automate the described process, it was decided to develop a web application. The authors provide an overview of analogues. A study of the process of compiling work programs. A list of fields to be automated has been defined. A study of the database of Yugra State University. The description of the technologies and languages used in the development of the web application is given.

Key words: web application, MVC, PHP, Phalcon Framework, PHPWord

Введение

Рабочая программа дисциплины (РПД) - нормативный документ, определяющий содержание, объем, структуру учебного процесса по изучению конкретной учебной дисциплины, основывающийся на государственном образовательном стандарте и примерной программе по учебному предмету, рекомендованной федеральными органами образования.

Цель РПД - планирование, организация, коррекция учебного процесса, управление учебным процессом по изучению учебной дисциплины.

При составлении РПД профессорско-преподавательский состав (1111С) заполняет документ вручную в соответствии с учебным планом, при этом всегда есть риск неправильного заполнения, ошибок и прочих недочетов.

Далее ППС должны подписать РПД у курс-лидера, к которому прикреплена эта дисциплина, руководителя образовательной программы обучения (ОПОП) и директора института, который ставит печать института на титульной странице.

Затем РПД проверяется специалистами академического отдела (АкО) и при наличии ошибок РПД возвращается ППС на доработку, а при их отсутствии утверждается.

Автоматизация составления РПД позволит заполнить большинство динамически изменяющихся полей автоматически, при этом в программе будет проверяться корректное заполнение данных, такое как распределение часов нагрузки из учебного плана по выбранной дисциплине.

ППС не придется сверять данные, рассчитывая количество оставшихся нераспределенных часов, имея удобный интерфейс, который не позволит составить РПД, пока часы учебного плана не будут полностью распределены по типам занятий: лекции, практические, самостоятельные и лабораторные работы.

Для веб-приложения автоматизации составления рабочих программ были рассмотрены следующие аналоги:

- генератор рабочих программ ТУСУР [1]. Данный программный продукт используется в университете ТУСУР для составления рабочих программ;

- лаборатория ММИС «Рабочие программы дисциплин» [2];

- конструктор рабочих программ [3].

Сравнение аналогов приведено в Таблица 1.

Таблица 1 - Сравнение аналогов

Автоматизация заполнения полей Формирование в печатном формате Возможность внедрения Автоматизация составления Цена

Генератор РП ТУСУР + doc, docx, pdf, rtf и др. + + 150000 руб.

Конструктор РП + Doc - - -

Лаборатория ММИС + rtf, pdf, html - - 99000 руб.

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

Таким образом, разработка веб-приложения позволит сократить время на подготовку РПД, снизить количество различных отклонений и ошибок, заполнив большинство полей документа автоматически, проконтролировав корректное распределение часов, основываясь на данных, хранящихся в базе данных (БД) Югорского государственного университета (ЮГУ).

Это, в свою очередь, приведет к сокращению количества возвратов на доработку от сотрудников АкО.

Исследование процесса составления РПД

Исследуя процесс составления РПД, были выявлены следующие недочеты при составлении РПД вручную. Некорректное распределение часов, постоянная сверка данных, таких как актуальные степень и звание разработчика, курс-лидера и руководителя ОПОП, сверка количества распределенных часов, уточнение компетенций, указания материально-технического обеспечения, ошибка при заполнении повторяющихся полей.

Большинство данных находится в БД ЮГУ, поиск и заполнение этих сведений может быть автоматизировано, что сведет время на уточнение информации к минимуму, а также сократит риск ошибок, связанных с человеческим фактором, таких как орфография, неточность.

Веб-приложение предоставляет возможность поиска этих данных в БД ЮГУ, их загрузки и расположения в необходимые поля документа автоматически.

Определение списка полей, подлежащих автоматизации

При анализе веб-приложение должно обеспечивать обработку следующих данных:

- данные о разработчике РПД (ФИО, ученая степень и звание, институт, ФИО директора института);

- данные о курс-лидере РПД (ФИО, ученая степень и звание);

- данные о руководителе ОПОП (ФИО, ученая степень и звание);

- данные об институте (название, ФИО директора);

- данные о направлении обучения (код направления, название направления, профиль, год набора, очный (заочный) тип);

- данные о дисциплине (код дисциплины, название дисциплины, количество семестров);

- данные о часах нагрузки из учебного плана, распределенные по семестрам и видам занятий: лекции, лабораторные, самостоятельные работы, практические занятия;

- список компетенций дисциплины (код компетенции, описание компетенции, показатели знать, уметь, владеть);

- список используемой литературы.

Также сформируем требования к веб-приложению:

- разработчик РПД должен быть зарегистрирован в системе, чтобы была возможность загрузить данные о нем из БД ЮГУ;

- сбор данных должен происходить посредством обращения к БД ЮГУ;

- интерфейс веб-приложения должен быть простым, интуитивно понятным, содержать минимум управляющих кнопок;

- конечная РПД должна выводиться в формате MS Word;

- веб-приложение должно быть внедряемым модулем в информационную систему (ИС) ЮГУ «ЭЛИОС».

Исследование базы данных ЮГУ

В ходе исследования были выделены сущности, необходимые для формирования представлений (результата выполнения запроса к нескольким сущностям и объединения данных запроса в одну результирующую таблицу) в БД для возвращения необходимых сведений при разработке РПД.

Следует учесть, что внутренняя структура БД ЮГУ имеет некоторые особенности, такие как отсутствие ограничений на связи между таблицами. Связи задаются программно в ходе написания SQL-запросов, любое редактирование таблиц без полного анализа структуры и связей грозит перманентным удалением данных.

В качестве внешних ключей в сущностях выступают поля с префиксом fc, по которым таблицы связываются в представлениях.

Буква f в начале названий полей пришла из дополнительной системы организации, к которой обращается БД, - «Галактика», в которой принято перед названиями ставить сокращение f от англ. field - поле.

Для первичных ключей таблиц принята запись fnRec, где n - number, Rec - Record, запись. Остальные названия полей были выбраны аналогично, исходя из целесообразного сокращения названий.

Исследование БД позволяет выявить сущности БД и необходимые поля со сведениями о РПД.

Таблица с часами и содержанием по учебному плану -U_Curr_DisMContent содержит часы по выбранной дисциплине в поле fSize, а также является основной связующей таблицей ко многим справочным таблицам, из которых можно получить дополнительные сведения.

Таблица U_Curr_DisMContent имеет связи с таблицами: U_Curr_Dis, которая является связующей и связывает данную таблицу с дисциплинами U_Discipline;

U_TypeWork, в которой хранится необходимый тип нагрузки по дисциплине по полю fName (лекции, практические занятия, лабораторные и самостоятельные);

U_Curr_Semester, в которой лежат сведения о выбранном семестре (узнаем номер семестра); U_Curriculum - таблица учебного плана, из которого необходимо достать название, код направления и год набора, а также указать в специальном поле fwType, что данный план является базовым, на основе которого рассчитываются часы нагрузки; и на таблицы U_Component_Dis и U_Cycle_Dis, на основе данных которых определяется принадлежность дисциплины к базовой или вариативной части, а также формируется аббревиатура кода дисциплины.

Таблица U_Curriculum, основные поля которой уже были описаны. Также имеет ссылку на кафедру к таблице Catalogs по полю fcChair.

Сама таблица Catalogs является агрегирующей таблицей-справочником, поскольку содержит множество различных справочных данных для множества других различных таблиц. В ходе исследования структуры БД из нее удалось извлечь множество необходимых данных по РПД, такие как специальность, кафедры, институты, должности сотрудников и пр. Имеет необходимые поля: fName - наименование записи (может быть что угодно, в зависимости от таблицы, ссылающейся на Catalogs); fcParent - ссылочный тип на саму себя, необходим для создания иерархии записей, например, принадлежности кафедр определенному институту.

Таблица MV_RPD_Heads_Department содержит информацию о главах подразделений организации - поля ffio$up (ФИО главы подразделения) и ссылку fDepartment на таблицу Catalogs, которая указывает подразделение.

Таблица Appointments содержит должностные назначения сотрудников, при работе с ней необходимо учитывать некоторые условия:

- таблица соединена с таблицей Catalogs через таблицу StaffStruct, которая хранит более актуальные сведения о подразделениях;

- таблица содержит ссылки на таблицу пользователей Persons, при этом при поиске данных о разработчиках РПД необходимо учитывать, что они будут относиться к категории ППС ЮГУ, а также отсортировать все их назначения и взять дату последнего назначения, поскольку в БД хранятся все возможные записи.

Из данной таблицы в соответствии с наложенными ограничениями можно получить список сотрудников, которые не были уволены (по полю fDissMissDate для проверки актуальности назначения) и относятся к категории ППС.

Непосредственно в самой таблице Persons хранятся сведения о пользователе системы (разработчике РПД), такие как его уникальный идентификатор (id) и ФИО.

Из таблицы v$rank можно взять ученые степени, которые заполняются из системы «Галактика», и привязать их к определенному пользователю по его уникальному идентификатору.

Перейдя от разработчика РПД к дисциплинам, можно отметить таблицу U_Discipline, в которой хранится название дисциплины.

На данную таблицу U_Discipline ссылается связующая таблица между дисциплинами и ее компетенциями - U_Curr_Dis_Competent.

Связав дисциплины и компетенции, из таблицы U_Competence можно взять код компетенции и ее содержание.

Также в процессе исследования была добавлена отдельная таблица RPD_Competence_Skills, которая хранит поля «Знать, уметь, владеть» для компетенций, доступ на заполнение которой предполагается автоматизировать в дальнейшем.

Разработка веб-приложения

Беря во внимание то, что разрабатываемое веб-приложение должно быть внедрено как модуль системы ЮГУ «ELIOS», веб-приложение разрабатывается на клиент-серверной архитектуре, повторяя архитектуру ИС «ELIOS», позволяющую пользователям осуществлять доступ к электронным ресурсам серверов ЮГУ. В разрабатываемом приложении используется шаблон проектирования Model-View-Controller (MVC) [4].

В данном разделе приведем описание разработки только серверной части веб-приложения.

Во время разработки пользовательского интерфейса (клиентской части) использовались таблица стилей CSS 3.0, язык гипертекстовой разметки HTML 5.0.

В качестве языка программирования клиентской части веб-приложения был выбран JavaScript-фреймворк с открытым исходным кодом для создания пользовательских интерфейсов в парадигме реактивного программирования Vue.js. [5].

Также были использованы возможности JavaScript-фреймворка, позволяющие быстро динамически обрабатывать элементы, основываясь на концепции virtual dom. [6].

В качестве языка программирования серверной части веб-приложения используется PHP. В качестве фреймворка для сокращения времени разработки на языке PHP был использован фреймворк Phalcon. Благодаря низкоуровневой архитектуре и оптимизациям Phalcon обеспечивает наименьшую нагрузку при работе MVC-приложений [7].

Модель отвечает за запросы и работу с БД. Структура ИС «ЭЛИОС» разделена на модули, каждому из которых в соответствие ставятся свои модели, контроллеры и представления.

Модель модуля РПД инициализирует подключение к БД и определяет функции, которые принимают параметры от контроллера для передачи их в БД и возвращение данных запроса. Язык PHP позволяет вставить принимаемые параметры на место SQL-запроса и передать запрос в БД вместе с данными параметрами.

Модель РПД в процессе взаимодействия с БД возвращает в различных функциях данные по разработчику, направлениям, дисциплинам (в зависимости от выбранного направления), компетенциям, часам дисциплины и все ее параметры, возвращает список сохраненных РПД разработчика, а также сохраняет промежуточные данные РПД в БД.

Модель должна обеспечивать внутреннюю логику приложения, передавать и принимать данные с управляющего контроллера, который взаимодействует с моделью и представлением и служит для передачи данных между моделью и представлением.

Методы контроллера обеспечивают инициализацию представления, передачу данных между представлением и моделью, принимая данные с представления для передачи их во внутренние методы модели и наоборот, принятия данных из модели для возвращения их в представление и отображения в интерфейсе пользователя.

Методы контроллера вызываются непосредственно из представления с передачей туда параметров их представления. Сам модуль РПД, а соответственно, и методы его контроллера будут доступны ППС ЮГУ и администраторам системы.

Для ограничения доступа к разрабатываемому модулю ИС «ЭЛИОС» определят роль пользователя в системе и доступные ему модули и методы контроллеров.

При помощи внутренних средств PHP мы можем вызвать состояние сессии (механизм, позволяющий однозначно идентифицировать браузер и создающий для этого браузера файл на сервере, в котором хранятся переменные сеанса) и определить уникальный идентификатор пользователя, который необходим при сохранении данных в БД и получения данных по запросу от модели, в которую необходимо передать данный идентификатор.

В представлении при каждом действии пользователя, для которого необходимы данные из БД или сохранение действий, посылается запрос при помощи технологии AJAX по определенному URL-адресу. Фреймворк PHP при помощи специальных функций сам определяет соответствие каждому URL запросу и методу контроллера при условии, что названия мето-

дов контроллера соответствуют определенным требованиям, а также URL-адрес в своем названии делится на несколько частей: название модуля, название контроллера, название метода контроллера, передаваемые параметры.

Благодаря архитектуре приложения все доступные методы ролям пользователей можно вынести в отдельный файл, в котором описаны все методы и контроллеры, доступные данной роли. Соответствие методов контроллера определенным ролям называется «Матрицей доступа».

Одним из методов контроллера является метод, работающий непосредственно с библиотекой phpWord, которая позволяет сформировать шаблон рабочей программы.

Шаблон документа заполняется при помощи библиотеки PHP Word. PHP Word - это библиотека, написанная на «чистом» PHP, которая предоставляет набор классов для записи и чтения из разных форматов файлов документов [8].

Часть шаблона РПД представлена в таблице 1.

Таблица 1 - Часть шаблона РПД, объемы и виды занятий

Виды занятий Объём занятий, час/з. е., очная форма обучения Объём занятий, час/з. е., заочная форма обучения

всего ${sem1} семестр

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Лекции ${hoursLectAll} ${hoursLectSem 1} ${hoursLectZ}

Практические занятия, в т. ч. интерактивные формы обучения ${hoursPractAll} ${hoursPractSem1} ${hoursPractZ}

Лабораторные работы, в т. ч. интерактивные формы обучения ${hoursLabAll} ${hoursLabSem1} ${hoursLabZ}

Самостоятельная работа ${hoursSamAll} ${hoursSamSem1} ${hoursSamZ}

Контрольные работы

Промежуточный контроль ${hoursControlAll} ${hoursControlSem 1}

Курсовой (-ая) проект/работа ${courseProject} ${courseProj ectSem 1}

Итого: ${itog} ${itogSem1}

Итоговый контроль: ${itogControl} ${itogControlSem 1}

Принцип формирования шаблона документа РПД повторяет принцип сохранения результатов РПД в БД. В представлении благодаря средствам JavaScript формируется передаваемый объект, который отправляется на серверную часть из клиентской части. В данный объект записываются все переменные, которые имеются в JavaScript на момент формирования РПД.

На серверной части создается специальная переменная типа phpWord при помощи средств соответствующей библиотеки. Определяется переменная data, в которой хранятся все параметры по РПД, принятые с клиентской части приложения (представления).

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

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

Далее проходит перебор по переменным, хранящимся внутри объекта data, и при помощи специальной функции setValue («template», var), предоставляемой библиотекой phpWord, происходит запись переменной var на место переменной «template» в шаблоне документа MSWord формируемой рабочей программы.

Объект data представляет обычный объект JavaScript, в котором будут собраны все переменные из Vue.js (из клиентской части) и переданы на серверную часть в PHP.

Фреймворк Vue.js содержит в своей структуре специальный метод, который возвращает собственные хранимые переменные. Для удобства соберем их в данный единый объект data вида {key: value}, где key - название переменной, value - ее значение.

К моменту формирования рабочей программы мы будем иметь следующие переменные внутри объекта data:

- discode - код дисциплины;

- discipline - название дисциплины;

- speccode - код специальности;

- speciality - специальность;

- selectedYear - год набора;

- fio - ФИО разработчика РПД;

- degree - степень разработчика РПД;

- rank - звание разработчика RPD;

- institute - институт;

- director - директор;

- department - кафедра разработчика;

- manager - заведующий кафедрой;

- mdegree - степень заведующего, mrank - звание заведующего;

- cdepartment - выпускающая кафедра направления;

- cmanager - заведующий выпускающей кафедрой направления;

- cmdegree - его степень;

- cmrank - его звание;

- semesters - массив с количеством и названиями семестров;

- tableVar - массив значений часов по семестрам и типам занятий для вкладки с таблицей часов;

- accordeon - преобразованный массив часов для отображения на вкладке распределения часов;

- competences - массив компетенций;

- literature - список литературы;

- mto - массив значений МТО;

- fos - массив значений ФОС;

- qualification - квалификация выпускника по дисциплине.

Если переменные внутри объекта data являются массивом (набором других переменных), то при помощи стандартных средств PHP перебираем данный массив, определяем количество элементов в нем и в зависимости от количества элементов в данном массиве копируем строки файла в шаблоне, содержащие необходимые переменные, на данное количество вниз. Таким образом, файл формируется динамически, вне зависимости от количества переменных.

Скопировать выбранную строку в шаблоне позволяет специальная функция библиотеки cloneRow («template», count), копирующая строку с переменной «template» count раз.

Концепция работы веб-приложения состоит в постепенном заполнении частей РПД, при котором динамически изменяются поля в полях веб-приложения, поскольку они зависят друг от друга и пересчитываются автоматически.

После сопоставления всем переменным из шаблона соответствующих переменных из PHP происходит сохранение файла. Файл сохраняется при помощи средств PHP, и в представление возвращается URL-ссылка на скачивание готовой РПД.

Одной из удобных особенностей библиотеки PHP Word является возможность вставки переменных PHP непосредственно в код документа, не собирая его заново, а используя шаблон документа со специальными полями, на место которых вставятся наши переменные.

Заключение.

Разработано веб-приложение автоматизированного составления рабочих программ учебных дисциплин. Меры, принятые для сокращения вероятности отклонения РПД, привели к положительному результату и позволили значительно сократить вероятность отклонения составляемой РПД.

Работа поддержана грантом Фонда академического развития по разработке проекта «Открытый университет» на проработку учебно-методических проектов по приоритетным направлениям ФГБОУ ВО «Югорский государственный университет».

Литература

1. Генератор рабочих программ ТУСУР : сайт. - URL: http://demoworkprogram.openteam.ru/ (дата обращения: 14.09.2019). - Текст : электронный.

2. ММиИС каборатория : сайт. - URL: https://www.mmis.ru/ (дата обращения: 14.09.2019). -Текст : электронный.

3. Конструктор рабочих программ : сайт. - URL: http://f49apk2.client02.prostoy.ru/ (дата обращения: 14.09.2019). - Текст : электронный.

4. Model-View-Controller. - Текст : электронный // Википедия : свободная энциклопедия. -URL: https://ru.wikipedia.org/wiki/Model-View-Controller (дата обращения: 29.06.2018).

5. A full-stack PHP framework delivered as a C-extension. - Text : direct // Phalcon = Высокопроизводительный PHP Фреймворк. - URL: https://phalconphp.com/ru/ (Date of circulation: 14.09.2019).

6. Vue.js. - Текст : электронный // Википедия : свободная энциклопедия. - URL: https://ru.wikipedia.org/wiki/Vue.js (дата обращения: 14.09.2019).

7. Что такое Virtual DOM?. - Текст : электронный // Habr : сайт. - 2015. - 29 апреля. - URL: https://habr.com/post/256965/ (дата обращения: 14.09.2019).

8. GitHub - PHPOffice/PHPWord A pure PHP library for reading and writing word processing document. - Текст : электронный // GitHub : сайт. - URL: https://github.com/PHPOffice/PHPWord (дата обращения: 14.03.2019).

i Надоели баннеры? Вы всегда можете отключить рекламу.