Федеральное государственное бюджетное образовательное учреждение высшего образования «Чувашский государственный университет имени И. Н. Ульянова»
Факультет информатики и вычислительной техники
Кафедра вычислительной техники
Отчет по курсовой работе
по дисциплине Базы данных
на тему «Разработка платформы для автоматизации заполнения протоколов СНО»
Работу выполнил: студент группы ИВТ-41-15 Агниашвили Д.В.
Работу принял: Ржавин В.В.
г. Чебоксары, 2017
Оглавление
Анализ предметной области
Концептуальное проектирование
Метод ER-диаграмм
Логическое проектирование
Создание запросов
Разработка форм
Описание форм
Разработка отчетов
Технология создания приложений PHP
Анализ многомерных данных
Бизнес правила.
1. Запрещается давать больше призовых мест, чем 40% от общего числа участников.
2. Запрещаетсяизменять данные людям, которые не получили права редактирования.
3. На «Ч.Г.У.» в одной секции максимум только 3 рекомендации к публикации в сборнике трудов конференции.
|
|
4.
Пользователи данной базы данных:
1. Секретарь
2. Сотрудник СНО факультета
3. Сотрудник СНО университета
4. Администратор
Состав базы данных.
1) Пользователь:
a. #ID
b. #НОМ_ФАКУЛЬТЕТА;
c. #НОМ_РОЛИ;
d. ID ВКонтакте;
e. Имя;
f. Фамилия;
g. Ссылка на фото;
2) Секция:
a. #ID
b. #НОМ_СЕКЦИИ;
c. #НОМ_ФАКУЛЬТЕТА;
d. Название;
e. Дата проведения;
f. Аудитория;
g. Статистика;
3) Факультет:
a. #ID
b. Короткое название;
c. Полное название
d. Название в родительном падеже
e. ФИО Декана
f. ФИО научного руководителя СНО
4) Комиссия:
a. #ID
b. #НОМ_СЕКЦИИ;
c. #НОМ_СТАТУСА;
d. ФИО;
e. #ДОЛЖНОСТИ;
5) Статус:
a. #ID;
b. Название;
6) Доклад:
a. #ID;
b. #НОМ_СЕКЦИИ;
c. Название;
d. Место;
e. Отметка «По программе»;
7) Рекомендации
a. #ID;
b. Название
c. Отметка, что доступно
8) Руководитель:
a. #ID;
b. #НОМ_ ДОКЛАДА;
c. ФИО;
d. Должность;
9) Докладчик:
a. #ID;
b. #НОМ_ДОКЛАДА;
c. #НОМ_ОПЦИИ;
d. ФИО;
e. Телефон;
10) Опции докладчика:
a. #ID;
b. #ДОКЛАДЧИКА;
c. #ТИП_ДОКЛАДЧИКА;
d. meta_key;
e. meta_value;
Типы связей.
Пользователь добавляет секцию (M:1)
Пользователь числится на факультете (M:1)
Секция имеет комиссию (1:M)
Комиссия делится на виды (M:1)
На секции показывают доклады (1:M)
У докладов есть руководители (1:M)
У докладов есть докладчики (1:M)
Концептуальное проектирование
№ | Название | Описание |
1. | Пользователь | Содержит информацию о пользователе системы |
2. | Секция | Содержит информацию о секции |
3. | Руководитель | Содержит информацию о руководителе доклада |
4. | Комиссия | Содержит информацию о комиссии секции |
5. | Докладчик | Содержит информацию о докладчике |
6. | Доклад | Содержит информацию о докладе |
|
|
Метод ER-диаграмм.
Логическое проектирование
Метод декомпозиции
Определим все функциональные зависимости, сведем их в таблицу и построим диаграмму функциональных зависимостей:
РИСУНОК
Создание запросов.
Описание запросов
№ | Текст запроса |
1) | Выдать всех секретарей секций SELECT * FROM `commission` WHERE `id_status` = 1; |
2) | Выдать список секций, которые были на ИВТ или ИГФ SELECT * FROM `sections` WHERE `id_fac` = 1 OR `id_fac` = 5; |
3) | Выдать список секций, которые проводятся 14.11.2017 SELECT * FROM `sections` WHERE `datetime` = ‘2017-11-14’ |
4) | |
5) | |
6) | |
7) | Выдать секцию с самым большим количеством докладчиков SELECT * FROM `sections` WHERE `count_users` = (SELECT MAX(`count_users`) FROM `sections`) |
8) | |
9) | |
10) | |
11) | |
12) | |
13) | |
14) |
№ | Имя запроса | Текст запроса |
Все группы с префиксом Иванов | Выводит список всех спикеров, у которых ФИО начинается с Иванов SELECT * FROM `speakers` WHERE `fio` LIKE `%Иванов%` AND `type` IN (`chuvsu`,`_chuvsu`); | |
ORDER BY 'date' LIMIT 5 | Выводит все поля 5-ти самых последних секций SELECT * FROM `sections` ORDER BY 'date' LIMIT 5; | |
Фильтр пользователей | Сортирует студентов по ФИО и выдает докладчиков SELECT * FROM `users` WHERE `id_report` = ORDER BY `fio`; | |
Созданиеархивной таблицы | Создает временную таблицу сообщений студентов. CREATE TABLE IF NOT EXISTS `msgs_rar` ( `id` int(255) NOT NULL AUTO_INCREMENT, `datetime` datetime NOT NULL, `user_id` int(16) NOT NULL, `message` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `level` int(11) NOT NULL DEFAULT '0', UNIQUE KEY `id` (`id`)); | |
Удаление таблицы. | Удаляет все записи из таблицы DROPTABLE `bot_sms` | |
Обновление записи | Администратор публикует идею UPDATE `ideas` SET `posted` = 1 WHERE `ID` =? | |
Группирование данных | Выдаёт из таблицы работ студентов выполненные работы SELECT COUNT(*),`lab_works`.`name_id`, SUM(`lab_works`.`is_complied`),`objects`.`name_object` FROM `lab_works` INNER JOIN `objects` ON `lab_works`.`name_id` = `objects`.`ID` WHERE `lab_works`.`user_id`=? AND `lab_works`.`type_works`=? AND `lab_works`.`time_start` <=? AND `lab_works`.`unix_time` >=? GROUP BY `lab_works`.`name_id` | |
Вывод дублей | Выводит повторяющие ФИО докладчиков SELECT `fio` FROM `speakers` GROUP BY ` fio` HAVING COUNT `fio`) > 1 | |
Добавление записи | INSERT INTO `users` (`id_vk`,`fio`,`GUID`) VALUES (?,?,?) | |
Вывод плановых работ | Выводит список работ которые нужно сдавать студенту SELECT `reports`.`ID` AS `ID_REPORT`, `speakers`.`ID` AS `ID_SPEAKER`, `reports`.`id_section`, `reports`.`name_report`, `reports`.`place`, IFNULL(`speakers`.`id_report`,0) AS `id_report`, IFNULL(`speakers`.`fio`,0) AS `fio`, IFNULL(`speakers`.`type`,0) AS `type` FROM `reports` LEFT JOIN `speakers` ON `reports`.`ID` =`speakers`.`id_report` WHERE `reports`.`id_section` =? AND `reports`.`place` > 0 ORDER BY Выводит список работ которые нужно сдавать студенту SELECT `all_labs`.`ID` AS `all_labs_ID`, `objects`.`name_object`, `object_types`.`type`, `all_labs`.`serial_num`, `all_labs`.`id_type`, `all_labs`.`id_object`, `all_labs`.`name`, IFNULL(`all_labs_unicum`.`ID`, '0') AS `all_labs_unicum_ID`, IFNULL(`all_labs_unicum`.`is_started`, '0') AS `is_started`, IFNULL(`all_labs_unicum`.`id_complied`, '0') AS `is_complied` FROM `all_labs` LEFT JOIN ( SELECT * FROM `all_labs_unicum` WHERE `all_labs_unicum`.`id_user` =? ) AS `all_labs_unicum` ON `all_labs`.`ID` = `all_labs_unicum`.`id_all_labs` INNER JOIN `objects` ON `all_labs`.`id_object` = `objects`.`ID` INNER JOIN `object_types` ON `object_types`.`ID` = `all_labs`.`id_type` WHERE `all_labs`.`id_group` =? AND `all_labs`.`term` =? ORDER BY `id_type`, `id_object`,`serial_num` SELECT SUM(`mark`)/COUNT(`mark`) FROM `works` WHERE `id_user` =? AND `id_type`!= 1 | |
Данные за период | Вывести все доклады у всех секций за определенный период SELECT * FROM `sections` INNER JOIN `reports` ON ` reports `.`id_ section` = ` sections `.`ID` WHERE ` reports`.`date` >=? |
Виды запросов
№ | Вид запроса | Шифр (ы) |
Запросы с выражениями, использующие 1. операторы строковых значений 2. все операторы сравнения с образцом 3. операторы обработки дат 4. операторы условных выражений 5. статистические функции по подмножеству 6. комплексные текстовые константы и константы даты | ||
Использование логических операторов, включающих в себя комбинацию «И», «ИЛИ» | ||
Запрос с вычисляемым полем | ||
Запрос с предикатом TOP | ||
Запрос, созданный из фильтра | ||
Запрос с внутренним соединением по нескольким полям | ||
Запрос с использованием внешнего соединения | ||
Запрос с рекурсивным соединением | ||
Запросы с параметрами | ||
Запросы на группирование данных Вычислений итоговых значений по всем записям | ||
Запросы на группирование данных Вычислений итоговых значений по группам записей | 7, 13 | |
Отбор повторяющихся записей и записей без подчиненных | ||
Запросы на удаление записи | ||
Запросы на обновление записи | ||
Запросы на добавление записей | ||
Запросы на создание таблицы | ||
Подчиненный запрос | ||
Перекрестный запрос |
Разработка форм
|
|
Описание форм
№ | Название формы | Тип формы | Назначение | Примечание |
Данные по факультету | Простая | |||
Идеи сервиса | Синхронизир | |||
Настройки профиля | ||||
Работа с секциями | ||||
Секции |
Разработка отчетов
№ | Название отчета | Тип отчета | Назначение |
Дипломы | |||
Благодарность | |||
№ | Название формы | Тип формы | Назначение |
Вывод таблицы посещаемости у 1 студента | Простая | Вывод всей посещаемости за определенную неделю | |
Загрузка портфолио студента | Синхронизированная форма | Вывод и изменение записей городов | |
Добавление посещаемости | Синхронизированная форма | Посещаемость группы | |
Добавление пары | Ленточная, всплывающая, | Форма добавления расписания | |
Форма | Диалоговое окно, синхронизированная, всплывающая | Посещаемость группы (Журнал учителя) | |
Добавление плановой работы | Диалоговое окно, синхронизированная, всплывающая | Добавление работ, которые нужно сдать студентам | |
Форма для председателей секций | Простая | Вывод всех таблиц, запросов и форм в виде дерева | |
Редактирование роли студента | Диалоговое окно | Можно назначить роли для студентов | |
Регистрационная форма | Форма, состоящая из вкладок, синхронизированная, | Регистрация абитуриента |
|
|
Реализация
При выборе среды реализации сравнивают программные продукты и пользуются различными средствами разработки приложений. Использование возможностей средств разработки приложений позволяет автоматизировать процесс разработки. Инструментальные средства позволяют:
· создавать интерфейс, используя стандартные компоненты;
· передавать управление процессам, в зависимости от состояния системы;
· создавать оболочки для баз данных, как и сами базы данных;
· разрабатывать более надежные программы путем обработки исключительных ситуаций возникающих при некорректной работе программы.
Современные средства разработки характеризуются параметрами:
· поддержка объектно-ориентированного стиля программирования;
· возможность использования CASE-технологий, как для проектирования разрабатываемой системы, так и для разработки моделей реляционных баз данных;
· использование визуальных компонент для наглядного проектирования интерфейса;
· поддержка БД.
Выше перечисленными свойствами обладают языки программирования:
· VisualC++.
· Delphi;
· PHP;
· Python;
Каждое из этих средств содержит весь спектр современного инструментария, который был перечислен ранее. Главное отличие состоит в области использования рассматриваемых средств.
Для реализации данной АИС был выбран язык программирования PHP версии 7, так как она предоставляет наиболее широкие возможности для программирования web-приложений.
PHP — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков[2], применяющихся для создания динамических веб-сайтов.
Преимущества PHP по сравнению с аналогичными программными продуктами.
· –быстрота разработки приложения;
· –высокая производительность разработанного приложения;
· низкие требования разработанного приложения к ресурсам компьютера;
· наращиваемость за счет встраивания новых компонентов и инструментов в среду PHP с помощью Composer;
· возможность разработки новых компонентов и инструментов собственными средствами PHP (существующие компоненты и инструменты доступны в исходных кодах);
· удачная проработка иерархии объектов.
К тому же работодателей интересует прежде всего скорость и качество создания программ, а эти характеристики может обеспечить только среда визуального проектирования, способная взять на себя значительные объемы рутинной работы по подготовке приложений, а также согласовать деятельность группы постановщиков, кодировщиков, тестеров и технических писателей. Возможности PHP полностью отвечают подобным требованиям и подходят для создания систем любой сложности.
В качестве системы управления базами данных (СУБД ) был выбран программный механизм, предназначенный для записи, поиска, сортировки, обработки (анализа) и печати информации, содержащейся в базе данных. К наиболее распространенным типам СУБД относятся: MS SQL Server, Oracle, Informix, Sybase, MS Access. В качестве основной была выбрана СУБД MySQL. С точки зрения простоты администрирования MySQL лучше продуман, что и повлияло на выбор данной системы.
Анализ многомерных данных
(тут будут графики разные с помощью MorrisJS)
Интеграция базы данных MySQL с WORD
Для Word используются файлы с расширением.docx, которые есть ничто иное как обычный zip-архив, поэтому решение напрашивается само собой: класс-генератор документов должен быть наследником класса ZipArchive, который доступен «из коробки». А остальное — дело техники.
require_once ('lib/PHPWord.php');
$controller = explode('/', $_GET['route']);
if (!isset($controller[1]) || strlen($controller[1]) == 0)
{die();}
$sectionID = intval(trim(strip_tags($controller[1])));
$sectionClass = new Section($sectionID,$db);
if (!$sectionClass->isIsset ())
{die();}
$sectionFacultyData = $sectionClass->getFacultySection();
$comision = new Commission($sectionID,$db);
$comisData = $comision->getCommision();
$report = new Report($sectionID,$db);
$positions = $sectionClass->getArrayPositions();
$fasc = $sectionClass->getArrayFaculties();
$courses = $sectionClass->getArrayCourses();
$uid = md5(uniqid(rand(), true));
$sectionData = $sectionClass->getDataSection ();
$dateArr = explode(':', $sectionData['time']);
$sectionData['time'] = $dateArr[0].":".$dateArr[1];
$stmt = $db->dbStream->prepare("SELECT `place`, COUNT(`place`)
FROM `reports`
WHERE `reports`.`id_section` =? GROUP BY `place`");
$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$countM = $stmt->fetchAll(PDO::FETCH_ASSOC);
$countmesta = 0;
$count = 0;
foreach ($countM as $key => $value)
{
$countmesta =($value['place']!= 0)? $countmesta + $value['COUNT(`place`)']: $countmesta;
$count += $value['COUNT(`place`)'];
}
if ($countmesta > ceil($count*0.4))
{
$answer = ['code' => '2',];
echo(json_encode($answer));
die();
}
$stmt = $db->dbStream->prepare("SELECT
`reports`.`ID` AS `ID_REPORT`,
`speakers`.`ID` AS `ID_SPEAKER`,
`speakers`.`id_position`,
`reports`.`id_section`,
`reports`.`name_report`,
`reports`.`place`,
IFNULL(`speakers`.`id_report`,0) AS `id_report`,
IFNULL(`speakers`.`fio`,0) AS `fio`,
IFNULL(`speakers`.`type`,0) AS `type`
FROM `reports`
LEFT JOIN `speakers`
ON `reports`.`ID` =`speakers`.`id_report`
WHERE `reports`.`id_section` =?
ORDER BY `reports`.`place` ");
$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$people = $stmt->fetchAll(PDO::FETCH_ASSOC);
/*
* Считаем количество
*/
$stmt = $db->dbStream->prepare("SELECT `meta_key`,`meta_value` FROM `count_people` WHERE `id_section` =?");
$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$comisCount = $stmt->fetchAll(PDO::FETCH_ASSOC);
$arrayCOUNT = array();
foreach ($comisCount as $countkey)
{
if (!isset($arrayCOUNT[$countkey['meta_key']]))
{
$arrayCOUNT[$countkey['meta_key']] = intval($countkey['meta_value']);
} else
{
$arrayCOUNT[$countkey['meta_key']] += $countkey['meta_value'];
}
}
/*
* Считаем количество коммисии
*/
$stmt = $db->dbStream->prepare("SELECT `id_position`, COUNT(`id_position`) FROM `commission` WHERE `id_section` =? GROUP BY `id_position`");
$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$comisCount = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($comisCount as $countkey)
{
if (!isset($arrayCOUNT[$countkey['id_position']]))
{
$arrayCOUNT[$countkey['id_position']] = intval($countkey['COUNT(`id_position`)']);
} else
{
$arrayCOUNT[$countkey['id_position']] += $countkey['COUNT(`id_position`)'];
}
}
/*
* Считаем количество докладчиков
*/
foreach ($people as $user)
{
if (!isset($arrayCOUNT[$user['id_position']]))
{
$arrayCOUNT[$user['id_position']] = 1;
} else
{
$arrayCOUNT[$user['id_position']]++;
}
}
$count = 0;
foreach ($arrayCOUNT as $arrayC)
{
$count += $arrayC;
}
$PHPWord = new PHPWord();
// New portrait section
$section = $PHPWord->createSection();
$PHPWord->setDefaultFontName('Times New Roman');
$PHPWord->setDefaultFontSize(12);
// Add text elements
$PHPWord->addFontStyle('facultyStyle', array('bold'=>true, 'size'=>12));
$PHPWord->addFontStyle('textFontStyle', array('size'=>12));
$PHPWord->addFontStyle('italicStyle', array('bold'=>true, 'italic'=>true, 'size'=>12));
$PHPWord->addParagraphStyle('pStyle', array('align'=>'center', 'spaceAfter'=>100));
$section->addText($sectionFacultyData['full_name'],'facultyStyle', 'pStyle');
$section->addText('ПРОТОКОЛ','textFontStyle', 'pStyle');
$section->addText('заседания Регионального фестиваля студентов и молодёжи «Человек. Гражданин. Учёный» (ЧГУ-2017) от 14 ноября 2017 года','textFontStyle', 'pStyle');
$section->addText("Секция «".$sectionData['name']."»", 'facultyStyle', 'pStyle');//underline
$section->addText('ауд. '.$sectionData['cabinet'].', '.$sectionData['date'].' начало в '.$sectionData['time'], 'facultyStyle', 'pStyle');
$section->addTextBreak(1);
// Define table style arrays
$styleTable = array('borderSize'=>6, 'borderColor'=>'000000', 'cellMargin'=>80);
$styleFirstRow = array('borderBottomSize'=>6, 'borderBottomColor'=>'000000', 'bgColor'=>'FFFFFF');
// Define cell style arrays
$styleCell = array('valign'=>'center');
$styleCellBTLR = array('valign'=>'center', 'textDirection'=>PHPWord_Style_Cell::TEXT_DIR_BTLR);
// Define font style for first row
$fontStyle = array('align'=>'left');
$italicStyle = array('italic'=>true, 'align'=>'center');
// Add table style
$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);
// Add table
$table = $section->addTable('myOwnTableStyle');
// Add row
$table->addRow();
// Add cells
$table->addCell(3000, $styleCell)->addText('Состав комиссии', $italicStyle);
$table->addCell(4000, $styleCell)->addText('Ф.И.О.', $italicStyle);
$table->addCell(3000, $styleCell)->addText('Должность', $italicStyle);
// Add more rows / cells
for($i = 1; $i <= count($comisData); $i++) {
$table->addRow();
if($comisData[$i-1]['id_status'] == 1)
{
$table->addCell(3000)->addText('Председатель секции', $italicStyle);
} elseif($comisData[$i-1]['id_status'] == 2)
{
$table->addCell(3000)->addText('Секретарь секции', $italicStyle);
} else
{
$table->addCell(3000)->addText('Другие члены жюри', $italicStyle);
}
$table->addCell(4000)->addText($comisData[$i-1]['fio']);
$table->addCell(3000)->addText($comisData[$i-1]['name']);
}
$section->addTextBreak(1);
$PHPWord->addParagraphStyle('textStyle', array('align'=>'left', 'spaceAfter'=>100));
$section->addText('Присутствовали (количество):'.$count.' чел.', null, 'textStyle');
$section->addText('Из них (указать в числах):', null, 'textStyle');
foreach ($positions as $position)
{
if (isset($arrayCOUNT[$position['ID']]) && $arrayCOUNT[$position['ID']] > 0)
{
$section->addText($arrayCOUNT[$position['ID']].' '.$main->num2word($arrayCOUNT[$position['ID']], [(strtolower($position['name'])), $position['name_2'], $position['name_3']]), null, 'textStyle');
}
}
$section = $PHPWord->createSection();
$section->addText('I. ВЫСТУПИЛИ:', null, 'textStyle');
// Add table style
$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);
// Add table
$table = $section->addTable('myOwnTableStyle');
$table->addRow();
$table->addCell(200, $styleCell)->addText('№ п/п', $italicStyle);
$table->addCell(3000, $styleCell)->addText('Ф.И.О. докладчика', $italicStyle);
$table->addCell(1500, $styleCell)->addText('Группа', $italicStyle);
$table->addCell(2000, $styleCell)->addText('Название доклада', $italicStyle);
$table->addCell(3000, $styleCell)->addText('Ф.И.О. и должность научного руководителя', $italicStyle);
$index = 1;
$stmt = $db->dbStream->prepare("SELECT * FROM `reports` WHERE `id_section` =?");
$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$reports = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($reports as $report)
{
$table->addRow();
$table->addCell(200, $styleCell)->addText($index, $fontStyle);
$stmt = $db->dbStream->prepare("SELECT * FROM `speakers` WHERE `id_report` =?");
$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($stmt->rowCount()!= 0)
{
$userStrName = "";
$userStrGroup = "";
foreach ($users as $key => $user)
{
$stmt = $db->dbStream->prepare("SELECT * FROM `speakermeta` WHERE `speaker_id` =? ");
$stmt->bindValue(1, $user['ID'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$meta = $stmt->fetchAll(PDO::FETCH_ASSOC);
$tArr = array();
foreach ($meta as $m => $me)
{
$tArr[$me['meta_key']] = $me['meta_value'];
}
switch ($user['type']) {
case 'chuvsu':
$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr[$listUserTypes[$user['type']]].', ': $tArr[$listUserTypes[$user['type']]]: '';
$tArr['b_k'] = ($tArr['b_k'] == 1)? ($tArr['stip'] == 1)? "Бюджет, получает":"Бюджет": "Контракт";
break;
case '_chuvsu':
$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr[$listUserTypes[$user['type']]]." ".$tArr['inst'].', ': $tArr[$listUserTypes[$user['type']]]." ".$tArr['inst']: '';
//$table->addCell(2300, $styleCell)->addText($tArr['name_group'], $fontStyle);
//$table->addCell(2000, $styleCell)->addText("", $fontStyle);
break;
case 'school':
$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr['school'].', ': $tArr['school']: '';
//$table->addCell(2300, $styleCell)->addText($tArr['class'], $fontStyle);
//$table->addCell(2000, $styleCell)->addText("", $fontStyle);
break;
}
$userStrName.= (isset($users[$key + 1]))? $user['fio'].', ': $user['fio'];
}
$table->addCell(3000, $styleCell)->addText($userStrName, $fontStyle);
$table->addCell(1500, $styleCell)->addText($userStrGroup, $fontStyle);
}
else
{
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
}
$table->addCell(2000, $styleCell)->addText($report['name_report'], $fontStyle);
$stmt = $db->dbStream->prepare("SELECT * FROM `managers` INNER JOIN `positions` ON `positions`.`ID`=`managers`.`id_position` WHERE `id_report` =? ");
$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$managers = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($stmt->rowCount()!= 0)
{
$str = "";
foreach ($managers as $m => $mng)
{
$str.= (isset($managers[$m + 1]))? $mng['fio']." ".mb_strtolower($mng['name']).', ': $mng['fio']." ".mb_strtolower($mng['name']).'';
}
$table->addCell(3000, $styleCell)->addText($str, $fontStyle);
}
else
{
$table->addCell(3000, $styleCell)->addText("", $fontStyle);
}
$index++;
}
$section->addTextBreak(1);
$section->addText('II. РЕШИЛИ:', null, 'textStyle');
$section->addText('1) По итогам обсуждения заслушанных докладов присудить следующие призовые места:', null, 'textStyle');
$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);
// Add table
$table = $section->addTable('myOwnTableStyle');
$table->addRow();
$table->addCell(200, $styleCell)->addText('Место', $italicStyle);
$table->addCell(2000, $styleCell)->addText('Ф.И.О. докладчика', $italicStyle);
$table->addCell(3000, $styleCell)->addText('Группа', $italicStyle);
$table->addCell(1000, $styleCell)->addText('Бюджет/Контракт', $italicStyle);
$table->addCell(2000, $styleCell)->addText('Получает ли стипендию', $italicStyle);
$table->addCell(2000, $styleCell)->addText('№ телефона', $italicStyle);
foreach ($people as $user)
{
if ($user['place'] > 0)
{
$table->addRow();
$table->addCell(200, $styleCell)->addText($user['place'], $fontStyle);
$table->addCell(2000, $styleCell)->addText($user['fio'], $fontStyle);
$stmt = $db->dbStream->prepare("SELECT * FROM `speakermeta` WHERE `speaker_id` =? ");
$stmt->bindValue(1, $user['ID_SPEAKER'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$meta = $stmt->fetchAll(PDO::FETCH_ASSOC);
$tArr = array();
foreach ($meta as $m => $me)
{
$tArr[$me['meta_key']] = $me['meta_value'];
}
switch ($user['type']) {
case 'chuvsu':
$table->addCell(3000, $styleCell)->addText($tArr['name_group'], $fontStyle);
$table->addCell(1000, $styleCell)->addText(($tArr['b_k'] == 1)? "Бюджет":"Контракт", $fontStyle);
$table->addCell(2000, $styleCell)->addText(($tArr['stip'] == 1)? "да":"нет", $fontStyle);
$table->addCell(2000, $styleCell)->addText($tArr['phone'], $fontStyle);
break;
case '_chuvsu':
$table->addCell(3000, $styleCell)->addText($tArr['name_group'], $fontStyle);
$table->addCell(1000, $styleCell)->addText("", $fontStyle);
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
$table->addCell(2000, $styleCell)->addText($tArr['phone'], $fontStyle);
break;
case 'school':
$table->addCell(3000, $styleCell)->addText($tArr['class'], $fontStyle);
$table->addCell(1000, $styleCell)->addText("", $fontStyle);
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
break;
}
}
}
$section->addText('2) Рекомендовать к публикации в сборнике трудов конференции следующий доклад:', null, 'textStyle');
$table = $section->addTable('myOwnTableStyle');
$table->addRow();
$table->addCell(2500, $styleCell)->addText('Ф.И.О. докладчика', $italicStyle);
$table->addCell(2000, $styleCell)->addText('Группа', $italicStyle);
$table->addCell(3000, $styleCell)->addText('Название доклада', $italicStyle);
$table->addCell(2500, $styleCell)->addText('Ф.И.О. и должность научного руководителя', $italicStyle);
/*
*
*/
$stmt = $db->dbStream->prepare("SELECT * FROM `reports` WHERE `id_section` =? AND `is_recommend_STK` = 1");
$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$reports = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($reports as $report)
{
$table->addRow();
$stmt = $db->dbStream->prepare("SELECT * FROM `speakers` WHERE `id_report` =?");
$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($stmt->rowCount()!= 0)
{
$userStrName = "";
$userStrGroup = "";
foreach ($users as $key => $user)
{
$stmt = $db->dbStream->prepare("SELECT * FROM `speakermeta` WHERE `speaker_id` =? ");
$stmt->bindValue(1, $user['ID'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$meta = $stmt->fetchAll(PDO::FETCH_ASSOC);
$tArr = array();
foreach ($meta as $m => $me)
{
$tArr[$me['meta_key']] = $me['meta_value'];
}
$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr[$listUserTypes[$user['type']]].', ': $tArr[$listUserTypes[$user['type']]]: '';
$userStrName.= (isset($users[$key + 1]))? $user['fio'].', ': $user['fio'];
}
$table->addCell(3000, $styleCell)->addText($userStrName, $fontStyle);
$table->addCell(1500, $styleCell)->addText($userStrGroup, $fontStyle);
}
else
{
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
$table->addCell(2000, $styleCell)->addText("", $fontStyle);
}
$table->addCell(2000, $styleCell)->addText($report['name_report'], $fontStyle);
$stmt = $db->dbStream->prepare("SELECT * FROM `managers` INNER JOIN `positions` ON `positions`.`ID`=`managers`.`id_position` WHERE `id_report` =? ");
$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);
try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}
$managers = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($stmt->rowCount()!= 0)
{
$str = "";
foreach ($managers as $m => $mng)
{
$str.= (isset($managers[$m + 1]))? $mng['fio']." ".mb_strtolower($mng['name']).', ': $mng['fio']." ".mb_strtolower($mng['name']).'';
}
$table->addCell(3000, $styleCell)->addText($str, $fontStyle);
}
else
{
$table->addCell(3000, $styleCell)->addText("", $fontStyle);
}
}
/*
*
*/
$section->addTextBreak(1);
$styleTable1 = array('borderSize'=>1, 'borderColor'=>'FFFFFF', 'cellMargin'=>80);
$styleFirstRow1 = array('borderBottomSize'=>1, 'borderBottomColor'=>'FFFFFF', 'bgColor'=>'FFFFFF');
$PHPWord->addTableStyle('myOwnTab1', $styleTable1, $styleFirstRow1);
$table = $section->addTable('myOwnTab1');
for($i = 1; $i <= count($comisData); $i++) {
$table->addRow();
if($comisData[$i-1]['id_status'] == 1)
{
$table->addCell(6000)->addText('Председатель секции');
} elseif($comisData[$i-1]['id_status'] == 2)
{
$table->addCell(6000)->addText('Секретарь секции');
} else
{
$table->addCell(6000)->addText('Другие члены жюри');
}
$table->addCell(4000)->addText($comisData[$i-1]['fio']);
}
$table->addRow();
$table->addCell(6000)->addText('Научный руководитель СНО факультета');
// Save File
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$uid = md5(uniqid(rand(), true));
$objWriter->save($uid.'.docx');
Интеграция базы данных с VKAPI (взамет аутлука)
РазработкаJSON взаменXML документа. RESTAPI?
Список использованной литературы
Тексты платформы