Выгода, которую дает технология JSP в сравнении с другими веб-технологиями заключается в том, что JSP является платформонезависимой, переносимой и легко расширяемой технологией для разработки веб-приложений.
Любая из представленных технологий сможет реализовать требования, предъявляемые к нашему приложению. Одним из ключевых фактов однако является хостинг созданной системы, и тут у РНР весомое преимущество, в интернете существует огромное число хостингов поддерживающих РНР в связке с MySQL, это и повлияло на выбор используемого языка программирования для серверной части системы [19, с. 170].
Для разработки клиентской части системы используется язык программирования JavaScript.
Язык JavaScript - это прототипно-ориентированный сценарный язык программирования. Является диалектом языка ECMAScript.
Язык JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.
Основные архитектурные черты: динамическая типизация, слабая типизация, автоматическое управление памятью, прототипное программирование, функции как объекты первого класса.
На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке.
Язык JavaScript практически не имеет конкурентов, единственным языком программирования - конкурентом JavaScript является язык Dart, разработанный в google, но он так и не приобрел популярность.
А вот фреймворков, облегчающих разработку на JavaScript, создано десятки, например: Backbone.js, Ember.js, CanJS, AngularJS, Dojo, YUI, jQuery, KnockoutJS, ExtJS.
Для создания системы выбран фреймворк jQuery , как один из наиболее популярных, а также рекомендуемых для простых веб-приложений и сайтов. Обеспечивающих кроссбраузерность, легкую обработку событий, взаимодействие с удаленными сервисами, расширяемость и огромный набор плагинов. В работе был использован свободный набор инструментов для создания сайтов и веб-приложений Twitter Bootstrap, основанный на фреймворке jQuery.
Разрабатываемая система будет хранить значительные объёмы структурированной информации, к которой необходимо обеспечить эффективный множественный доступ. Исходя из этого, в качестве информационной системы была выбрана реляционная база данных.
Для управления базой данных необходимо выбрать СУБД, которая будет максимально отвечать требованиям, предъявляемым к разрабатываемому веб-приложению.
Для написания и локального тестирования системы выбрался Open Server . Это портативная программная платформа, созданная специально для веб-разработчиков с учётом их рекомендаций и пожеланий.
Программный комплекс имеет богатый набор серверного программного обеспечения, удобный, многофункциональный продуманный интерфейс, обладает мощными возможностями по администрированию и настройке компонентов. Платформа широко используется с целью разработки, отладки и тестирования веб-проектов, а так же для предоставления веб-сервисов в локальных сетях.
Open Server включает в себя: Apache, nginx, PHP, MySQL, phpMyAdmin,FTP-сервер,FileZilla.
Open Server- это пожалуй наилучший комплект на сегодняшний день для создания и тестирования локальных сайтов под Windows. Удобное меню, система запуска, простое создание виртуальных хостов, внимание к мелочам позволяют легко работать начинающим веб-разработчикам, а входящие в комплект компоненты устроят и профессиональных программистов.
Для хостинга сайта был выбран сервис Hostinger.ru. Компания Hostinger - лидер услуг бесплатного веб-хостинга. Пользователи могут создавать собственные сайты без лишних расходов, без рекламы и под любые потребности. На этом сервисе поддерживается PHP, MySQL и FTP-сервер. Это необходимый минимум для работоспособности разрабатываемой системы. Также сервис предоставляет собственные домены 3 уровня.
3.2 Реализация программной части веб - приложения
Реляционная структура базы данных приведена на рисунке 11.
Рисунок 11 - Реляционная структура базы данных
Таблица users содержит информацию о пользователях. Поле nickname является логином пользователя на сайт. Поля password_hash и salt отвечают за хранение пароля пользователя в БД.
Таблица categories содержит список категорий (тем) рассылки и определить какой пользователь подписан, на какие категории рассылки помогает таблица subscriptions, если она содержит ключ ID пользователя - ID категории, то пользователь подписан на эту категорию.
Таблица mails хранит в себе все отправленные сообщения. Понять какие сообщения были отправлены для каких категорий помогает таблица mailing_map. Если она содержит ключ ID категории - ID сообщения, то данное сообщение передавалось для всех пользователей данной категории.
Таблица hashes требуется для автоматической авторизации пользователя со всех устройств, с которых он уже входил в систему. при загрузке сайта с устройства, если пользователь не залогинен, то в cookies проверяется хэш сайта, и если совпадают пары хэш и ID пользователя, происходит автоматическая авторизация пользователя.
Описание таблиц базы данных приведено в Приложении Б.
Запросы, формирующие базу данных, приведены в Приложении В.
Для работы с базой данных и формирования контента сайта используется язык php.
Описание взаимодействия с базой данных средствами PHP приведено в Приложении Г.
3.3 Описание общей схемы взаимодействия компонент веб-приложения, основные сценарии работы
Попав на сайт, пользователь может зарегистрироваться или авторизоваться. Если пользователь попытается подписаться на рассылку без авторизации, то всплывет модальное окно с приглашением войти на сайт. Пользователи могут изменять настройки своих подписок.
Администратор имеет расширенный интерфейс, он может изменять настройки пользователь, а также изменять настройки категорий рассылок в специальных меню, доступных только людям с правами администратора. Также он может создать дополнительные категории, посмотреть архив рассылок и создать свою собственную рассылку.
Все события обрабатываются скриптом index.php или скриптами, доступными в папке / scripts. Все скрипты из этой папке не опасны, т.к. не содержат информации для подключения к базе данных.
Схема переходов пользователя приведена на рисунке 12.
Рисунок 12 - Схема переходов пользователя
Как видно из рисунка 12 схема переходов пользователя включает регистрацию, авторизацию, восстановление пароля, подписаться и отписаться от категории.
Основные страницы веб - приложения приведены в Приложении Д.
В третьей главе курсовой работы рассмотрен практический пример использования SQL в прикладном программировании на основании разработки веб - приложения, для которого была разработана и описана реляционная база данных, созданы SQL запросы по работе с базой данных и описан интерфейс пользователя.
Заключение
В первом разделе данной курсовой работы были изучены основные понятия и технологии распределенной обработки данных.
База данных представляет собой набор логически связанных данных, которые предназначен для удовлетворения информационных потребностей пользователей, а система управления базами данные - это программное обеспечение (ПО), с помощью которого пользователи могут определять, создавать и поддерживать базу данных, а также получать к ней контролируемый доступ.
Проведена классификация баз данных и СУБД по степени распределенности, по технологии хранения данных, в зависимости от характера хранимой информации и способа хранения данных, а также по содержимому.
Проведен сравнительных анализ основных моделей построения баз данных, обоснованно выделена реляционная модель построения баз данных для дальнейшего исследования.
Реляционная модель данных представляет собой логическую модель данных, построенную на основе набора отношений и аспекта целостности, где отношения отвечают определенным условиям целостности и принципам обработки, с помощью которого реляционная модель данных поддерживает операторы обработки отношений, таких как реляционная алгебра и реляционное исчисление.
В результате изучения технологий распределенной обработки данных была рассмотрена технология модели «клиент-сервер» основана на принципе взаимодействия двух программных процессов, в котором клиентский процесс запрашивал некоторые услуги, а серверный - обеспечивал их выполнение, причем один серверный процесс может обслужить множество клиентских процессов.
Также для распределения указанных функций рассмотрены структура, достоинства и недостатки двухуровневых моделей: модель удаленного управления данными и модель файлового сервера, которые исключают недостатки одноуровневой «клиент-серверной» технологии.
На основании проведенного исследования в первой главе обоснованно выбраны для дальнейшего исследования реляционная модель построения баз данных и модель удаленного управления данных, как наиболее подходящие для распределенной обработки данных с использование SQL-запросов к серверу БД.
Во втором разделе были рассмотрены особенности построения языка структурированных запросов SQL, который является информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных.
Каждое предложение SQL - это запрос или обращение к базе данных, которое приводит к изменению в базе данных.
Таким образом, использование SQL сводится, по сути, к формированию всевозможных выборок строк и совершению операций над всеми записями, входящими в набор.
Различают следующие основные операторы SQL: операторы определения данных DDL, операторы манипулирования данными DML, операторы управления транзакциями TCL.
Наличие стандартов и набора тестов для определения совместимости конкретной реализации SQL к общепринятому стандарту заметно способствует унификации языка. При этом программист имеет возможность "подсказывать" СУБД при формировании запроса, какие лучше использовать индексы и в каком порядке.
В третьем разделе данной курсовой работе рассмотрен практический пример использования SQL в прикладном программировании на основании разработки веб - приложения, для которого была разработана и описана реляционная база данных, созданы SQL запросы по работе с базой данных и описан интерфейс.
В процессе выполнения курсовой работы решены следующие задачи:
) раскрыты сущность понятий база данных, системы управления базами данных путем изучения классификации баз данных и СУБД по степени распределенности, по технологии хранения данных, по содержимому, по моделям построения;
) рассмотрены особенности реализации реляционной модели данных;
) рассмотрены технологии распределенной обработки данных путем определения из достоинств и недостатков, проведения сравнительного анализа, а также выделена технология, которая наиболее подходит для распределенной обработки данных с использованием SQL-запросов к серверам БД;
) выделена структура и определены назначения основных операторов SQL: операторов определения данных DDL, операторов манипулирования данных DML, операторов управления данными DCL;
) рассмотрены и реализованы на практике возможности использования SQL в прикладном программировании.
Учитывая, что все поставленные задачи курсовой работы решены, можно обоснованно утверждать, что главная цель исследования - достигнута.
Список использованной литературы
1. Астахова И.Ф., Толстобров А.П., Мельников В.М. SQL в примерах и задачах. - Мн.: Новое знание, 2011. - С.4
. Боуман Дж.С., Эмерсон С.Л., Дарновски М. Практическое руководство по SQL. - Вильямс, 2011. - С.56-90
. Гарсиа-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных. Полный курс. - Вильямс, 2010. - С.125
. Дейт К. Введение в системы баз данных, 8-е издание. - Вильямс, 2006. - С.725
. Дейт К. SQL и реляционная теория. Как грамотно писать код на SQL. - Символ-Плюс, 2010. - С.123
. Дейт К., Дарвен Х. Основы будущих систем баз данных. Третий манифест. - Янус-К, 2011. - С.102
. Дунаев В.В. Базы данных. Язык SQL. - СПб. : БХВ-Петербург, 2010. - С.88
. Дж. Кастаньетто, Х.Рават, С.Шуман, К.Сколло, Д.Велиаф «Профессиональное РНР программирование». - Пер. с англ. - СПб: Символ-Плюс, 2010. - С.76
. Жилин Д.М. Теория систем: опыт построения курса. - КомКнига, 2011. - С.123
. Иванова Г.С. - «Основы программирования» Учебник для вузов. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2010. - С.156
. Коггзолл Джон. PHP 5. Полное руководство - М.: Вильямс, 2012 - С.336
. Кренке Д. Теория и практика построения баз данных. - Питер, 2010. - С.206
. Мирошниченко Г. Реляционные базы данных. Практические приемы оптимальных решений. - СПб. : БХВ-Петербург, 2011. - С.199
. Новиков Б., Домбровская Г. Настройка приложений баз данных. - BHV, 2011. - С.22
. Советов Б.Я., Цехановский В.В., Чертовской В.Д. Базы данных. Теория и практика.- Высшая школа, 2010. - С.49
. Скотт В. Эмблер, Прамодкумар Дж. Садаладж Рефакторинг баз данных. Эволюционное проектирование. - Вильямс, 2010. - C.36
. Тоу Д. Настройка SQL. Для профессионалов. - Питер, 2011. - С.103
. Фейт С. TCP/IP. Архитектура, протоколы и реализация (включая IP версии 6 и IP Security) - Питер, 2011. С.196
. MySQL. Библиотека профессионала - Киев: Диалектика, 2012 - С.170-179
. PHP/MySQL для начинающих - Кудиц-образ, 2010 - С.44-108
21. Теория и практика построения баз данных: Д. Крёнке. - Питер, 2011. - С.223-250
22. Базы данных. «Проектирование, реализация и сопровождение», Томас Конном, Королинг Берг - 2010. - С.102 . Багриновский К.А. Хрусталев Е.Ю. Новые информационные технологии. - М.: ЭКО, 2011. - С.122
. Информатика и информационно-коммуникационные технологии. Базовый курс: И.Г. Семакин, С.В. Русаков, Л.В. Шестакова. - М: БИНОМ, Лаборатория знаний, 2010. - С. 169
. Компьютерные технологии обработки информации / Под ред. С.В. Назарова. - М.: Финансы и статистика, 2005. - С.108
. Соболь Б.В., Галин А.Б., Панов Ю.В. и др. Информатика: учебник. - М.: Феникс, 2007. - С.223
28. Шкарина Л. Язык SQL: учебный курс. - СПб.: Питер, 2001 - С.23-96
Приложение А
Характеристики объектно-ориентированной модели данных
НазваниеЗначениеПоддержка сложных объектовПредусмотрена возможность создания составных объектов за счет применения конструкторов составных объектов. Необходимо, чтобы конструкторы объектов были ортогональны, то есть любой конструктор можно было применять к любому объектуПоддержка индивидуальности объектовОсновным требованием является, что все объекты должны иметь уникальный идентификатор, который не зависит от значений их атрибутовПоддержка инкапсуляцииКорректная инкапсуляция достигается за счет того, что программисты обладают правом доступа только к спецификации интерфейса методов, а данные и реализация методов скрыты внутри объектовПоддержка типов и классовНеобходима концепция между типами и классами, компилятор может использовать информацию для проверки выполняемых с переменной операций на совместимость с ее типомПоддержка наследования типов и классов от их предковПодкласс должен наследовать атрибуты и методы его супертипа и для обеспечения этой функциональности связывание имен методов в системе не должно выполняться до времени выполнения программыВычислительная полнотаЯзык программирования должен быть общего назначения для манипулирования даннымиРасширенность набора типа данныхНаличие средств для создания новых типов данных на основе набора предопределенных системных типов. Особое требование - это то, что между способами использования системных и пользовательских типов данных не должно быть никаких различий
Приложение Б
Описание таблиц базы данных
Таблица users `u_id` Первичный ключ пользователя `nickname` Логин пользователя `email` Адрес электронной почты пользователя `password_hash` Хэш пароля пользователя `salt` Соль, используемая для получения пароля пользователя `reg_date`,Дата регистрации `last_update` Дата последних изменений профиля пользователя `role` Права пользователя
Таблица categories `id`Первичный ключ категории `name` Название категории `description` Описание категории `promo_content` Контент, демонстрирующийся на сайте для рекламы категории `date_create` Дата создания категории
Таблица subscriptions `fk_user` Внешний ключ к таблице пользователей `fk_categoryВнешний ключ к таблице категорий
Таблица mails `id` Первичный ключ сообщения `content` Содержание сообщения `date_create` Дата создания сообщения
Таблица mailing_map `fk_mail` Внешний ключ к таблице сообщений `fk_category` Внешний ключ к таблице категорий
Таблица hashes `h_id` Первичный ключ хэша `u_fk` Внешний ключ к таблице пользователей `s_hash` Значение хэша `date_create` Дата создания записи `last_update` Дата последнего обновления хэша
Приложение В
Запросы, формирующие базу данных
CREATE DATABASE IF NOT EXISTS `emailbd` /*!40100 DEFAULT CHARACTER SET utf8 */;`emailBD`;TABLE IF NOT EXISTS `users` (
`u_id` int(11) NOT NULL AUTO_INCREMENT,
`nickname` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`password_hash` varchar(64) NOT NULL,
`salt` varchar(64) DEFAULT NULL,
`reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_update` datetime DEFAULT NULL,
`role` varchar(30) DEFAULT NULL,KEY (`u_id`),KEY `nickname` (`nickname`),KEY `email` (`email`),`password_hash` (`password_hash`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`description` text,
`promo_content` text,
`date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;TABLE IF NOT EXISTS `subscriptions` (
`fk_user` int(11) NOT NULL,
`fk_category` int(11) NOT NULL,KEY (`fk_user`,`fk_category`),`fk_category` (`fk_category`),`subscriptions_ibfk_1` FOREIGN KEY (`fk_user`) REFERENCES `users` (`u_id`) ON DELETE CASCADE ON UPDATE CASCADE,`subscriptions_ibfk_2` FOREIGN KEY (`fk_category`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;TABLE IF NOT EXISTS `mails` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` text,
`date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;TABLE IF NOT EXISTS `mailing_map` (
`fk_mail` int(11) NOT NULL,
`fk_category` int(11) NOT NULL,KEY (`fk_mail`,`fk_category`),`fk_category` (`fk_category`),`mailing_map_ibfk_1` FOREIGN KEY (`fk_mail`) REFERENCES `mails` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,`mailing_map_ibfk_2` FOREIGN KEY (`fk_category`) REFERENCES `categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;TABLE IF NOT EXISTS `hashes` (
`h_id` int(11) NOT NULL AUTO_INCREMENT,
`u_fk` int(11) NOT NULL,
`s_hash` varchar(64) DEFAULT NULL,
`date_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_update` datetime DEFAULT NULL,KEY (`h_id`),`hashes_ibfk_1` (`u_fk`),`hashes_ibfk_1` FOREIGN KEY (`u_fk`) REFERENCES `users` (`u_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Приложение Г
Взаимодействие с БД средствами PHP
Mail - Класс письмоPrivate:$idid письма в таблице$content Содержимое письма$date_create Дата добавления в таблицу письмаPublic :__construct ($data)Вызывает контсруктор объекта (устанавливает значения полей)__get_id()Получить значение переменной $id__get_content()Получить значение переменной $content__get_date_create()Получить значение переменной $ date_create__set_id ($val)Установить значение переменной $id__set_content ($val)Установить значение переменной $content__set_date_create ($val)Установить значение переменной $ date_create
MailManager - Отвечает за создание письма и рассылку пользователямpublic static:CreateMail ($content)Сохраняет письмо в БДSendMailText ($mailAdres,$content)Отправляет письмо по указанному адресуCreateMailing ($listCategories,$content)Выполняет рассылку всем пользователям, подписанным на категории, содержащимся в списке $ listCategoriesGetListMails ($start,$skip)Возвращает массив писем размером $skip начиная с элемента $start из БД
Category - Класс категория (тема подписки)Private:$idid категории в таблице$name Название категории$descriptionОписание категории$promo_content Контент, который будет представлять на сайте категорию.$date_create Дата добавления в таблицу письмаPublic :__construct ($data)Вызывает контсруктор объекта (устанавливает значения полей)__get_id()Получить значение переменной $id__get_name()Получить значение переменной $name__get_description()Получить значение переменной $ description__get_promo_content()Получить значение переменной $promo_content__get_date_create()Получить значение переменной $date_create__set_id ($val)Установить значение переменной $id__set_name ($val)Установить значение переменной $name__set_description ($val)Установить значение переменной $description__set_promo_content ($val)Установить значение переменной $ promo_content__set_date_create ($val)Установить значение переменной $ date_create
MailManager - Управляет множеством товаров как одной сущностью public static:CreateMail ($content)Сохраняет письмо в БДSendMailText ($mailAdres,$content)Отправляет письмо по указанному адресу CreateMailing ($listCategories,$content)Выполняет рассылку всем пользователям, подписанным на категории, содержащимся в списке $ listCategoriesGetListMails ($start,$skip)Возвращает массив писем размером $skip начиная с элемента $start из БДUser - Класс пользовательPrivate:$idid пользователя в таблице$email Адрес электронной почты пользователя$nicknameИмя пользователя на сайте$password_hashХэш пароля пользователя$saltСоль пользователя при получении хэша пароля$reg_dateДата регистрации пользователя$last_update Последнее обновление настроек пользователя$roleПрава пользователя (user/admin)Public:__construct ($data)Вызывает контсруктор объекта (устанавливает значения полей)__get_u_id()Получить значение переменной $u_id__get_role()Получить значение переменной $role__get_email()Получить значение переменной $email__get_nickname()Получить значение переменной $nickname__get_reg_date()Получить значение переменной $reg_date__get_last_update()Получить значение переменной $last_update__get_salt()Получить значение переменной $salt__get_password_hash()Получить значение переменной $ password_hash__set_u_id ($val)Установить значение переменной $u_id__set_role ($val)Установить значение переменной $role__set_email ($val)Установить значение переменной $email__set_nickname ($val)Установить значение переменной $nickname__set_reg_date ($val)Установить значение переменной $reg_date__set_last_update ($val)Установить значение переменной $last_update__set_salt ($val)Установить значение переменной $salt__set_password_hash ($val)Установить значение переменной $ password_hash
UserManager - Класс отвечает за регистрацию/ аутентификацию/удаление пользователейPublic :__construct()Вызывает контсруктор объекта (устанавливает значения полей)Public static :generateSalt()Возвращает случайную последовательность для соли к паролю пользователяmyCrypt ($pass,$salt)()Возвращает хэш пароля пользователя и солиupdateHashe_Cookie ($q_id,$q_hahs)Устанавливает в cookie новое значение параметра SH (используется для автоматического логина пользователя)checkUserByNickname_Pass ($login,$pass)Сравнивает введенный пароль пользователя с хранящимся в базе (их хэши) и возвращает ID пользователя в случае совпаденияsetCookie ($id=null)Устанавливает cookie в браузер пользователя (параметры userid, SH)delCookie ($id=null)Удаляет cookie с браузера пользователяrefreshUser ($q_id,$q_hahs)Обновляет параметр SH в cookie пользователяregistrationUser ($login,$pass,$mail)Регистрирует пользователя - сохраняет в БД его логин, пароль и адрес электронной почтыrecoveryUserByNickname ($login) Отсылает на почту пользователя по его запросу новый пароль, сгенерированный автоматическиrecoveryUserByID ($userid) Отсылает на почту пользователя по запросу администратора новый пароль, сгенерированный автоматическиsendUserNewPassByMail ($usr0,$new_pass)Функция отвечает непостредственно за отсылку пользователю пароляcheckUserByNickname ($login)Проверяет наличие в БД пользователя с переданным логиномdeleteUser ($id) Удаляет пользователя из БД
SettingController - Класс отвечает за действия над пользователями из административной части сайтаPublic static :getListUsers()Возвращает список пользователейgetListCategories()Возвращает списко категорийgetUserByID ($u_id)Возвращает данные пользователя по его IDgetCategoryByID ($cat_id)Возвращает данные каотегории по ее IDgetCategoriesMapByUser ($u_id) Возвращает все категории и выделяет категории, на которые подписан пользовательgetNumberSubscriberByCategoryId ($cat_id)Вовзращает число подписанных пользователей на категориюupdateSubscription ($userid,$cat_id,$statuse) Изменяет состояние подписки пользователя на категориюupdateRole ($userid,$role) Изменяет права пользователя на сайтеnewCategory ($name,$description,$content)Создает новую категориюupdateCategory ($cat_id,$name,$description,$content)Изменяет категориюdeleteCategory ($cat_id)Удаляет категорию
DBConnect- Класс для работы с БДprivate static:$DB_HOSTАдрес БД$DB_NAMEИмя БД$DB_USERИмя пользователя в БД$DB_PASSПароль пользователя в БДprotected $DBH;Объект - соединение с БДpublic function:getUserByID ($id=null)Возвращает пользователяdeleteUserByID ($u_id)Удаляет пользователя из БДgetUserByNickname ($nickname=null)Возвращает пользователя по его логинуgetUserByNicknameForRecovery ($login)Возвращает пользователя (его ID) если он есть в БД (логин)getUserByMail ($mail=null)Возвращет пользователя по его адресу электронной почтыaddSubscription ($fk_user,$fk_category)Добавляет подписку пользователю на категорию
DBConnect- Класс для работы с БДdelSubscription ($fk_user,$fk_category) Удаляет подписку пользователю на категориюaddMailingMap ($fk_mail,$fk_category)Добавляет в БД информацию о том, какое сообщение было отправлено по каким категориямdelMailingMap ($fk_mail,$fk_category)Удаляет из БД информацию о том, какое сообщение было отправлено по каким категориямaddUser ($nickname,$pass_hash, $salt,$mail=null,$role='user')Добавляет в БД нового пользователяaddCoupleUserID_Hash ($u_id,$hash)Добавляет в таблицу хэшей пару - ID пользователя и его хэщdelCoupleUserID_Hash ($u_id,$hashУдаляет запись из таблицы хэшейupdCoupleUserID_Hash ($u_id,$hash,$new_hash)Обновляет запись в таблице хэшейgetCountCoupleUserID_Hash($u_id,$hash)Возвращает из БД число устройств, с которых залогинен пользовательgetCountUsersByMail ($mail)Возвращает число пользователей в БД с указанным адресом электронной почты updPassword_SoltByUserID ($u_id,$new_pass_hash,$new_solt)Обновляет хэш и соль пароля пользователя getListUsers ($skip=0,$max=1000)Возвращает список пользователейgetListCategories ($skip=0,$max=100)Возвращает список категорийgetMapCategoriesByUser ($userid)Возвращает список всех категорий и отмечает на какие подписан пользовательgetCountSubscriberByCategoryID ($cat_id)Возвращает число пользователей подписанных на категориюgetCategoryByID ($id=null)Возвращает данные о категории updUserRoleByID ($id,$role)Обновляет права пользователя на сайтеaddCategory ($name,$description,$content)Добавляет новую категориюupdateCategory ($id, $name, $description, $content)Обновляет параметры категорииdeleteCategory ($id)Удаляет категориюaddMail ($content)Записывает в БД текст письмаgetListEmailsByCategoriesID($listCategoryID)Возвращает массив адресов электронных почт пользователей, подписанных на категории, указанные в параметр getListMailsForArhive ($start=0,$skip=20)Возвращает массив писем, которые были посланы по категориям, указанным в параметре
Приложение Д
Основные элементы интерфейса пользователя сервиса подписки
Рисунок П1 - Главная страница сайта
Рисунок П2 - Страница авторизации
Рисунок П3 - Страница управления настройками
Рисунок П4 - Страница архива рассылок
Рисунок П5 - Страница создания новой рассылки