Шаг
|
Описание
|
1
|
Изначальное состояние системы
|
2
|
Добавлен проект по-умолчанию
|
3
|
Добавлен шаблон «Меню, содержимое 1, содежимое
2, копирайт»
|
4
|
Добавлена страница «О кроликах»
|
5
|
Изменен шаблон «Меню, содержимое 1, содежимое
2, копирайт»
|
6
|
Изменена страница «О кроликах»
|
7
|
Добавлен шаблон «Содержимое и копирайт»
|
8
|
Добавлена страница «О кошечках and dogs»
|
9
|
Добавлена страница «Заготовочка о пушистиках»
|
10
|
Добавлен ресурс «01.mid»
|
11
|
Удален ресурс «01.mid»
|
12
|
Добавлен ресурс «02.mid»
|
13
|
Изменен шаблон «Меню, содержимое 1, содежимое
2, копирайт»
|
14
|
Изменен черновик по-умолчанию страницы «О
кроликах»
|
15
|
Удалена страница «О кошечках and dogs»
|
16
|
Удален шаблон «О кошечках and dogs»
|
17
|
Добавлен черновик «черновичок my» для страницы
«О кроликах…»
|
18
|
Добавлен черновик «черновичок my2» для страницы
«О кроликах…»
|
19
|
Удален черновик «черновичок my2» страницы «О
кроликах…»
|
20
|
Добавлен ресурс
«2009-04-13-1239634885_1024x600_scrot.png»
|
21
|
Добавлен ресурс «aleaf.jpg»
|
22
|
Изменен черновик по-умолчанию страницы
«Заготовочка о пушистиках»
|
23
|
Запрошено содержимое шаблона «Меню. Содержимое
1. Содежимое 2. Копирайт.»
|
24
|
Запрошено содержимое черновика «черновичок my»
страницы «О кроликах…»
|
25
|
Запрошен список страниц
|
26
|
Запрошен список шаблонов
|
27
|
Запрошен статус проекта
|
28
|
Запрошен глобальный список ресурсов
|
29
|
Запрошен список ресурсов для страницы
«Заготовочка о пушистиках»
|
OK1DraftsDrafts
2DraftsDrafts
3: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайтDrafts: 1,
draft_uid: default, temp_id: 1Drafts
4: 1, page_uid: О кроликах, page_url: bunnies: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайтDrafts: 1,
draft_uid: default, temp_id: 1Drafts: 1, draft_uid: default, page_id: 1
published: 1
5: 1, page_uid: О кроликах, page_url: bunnies: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайтDrafts: 1,
draft_uid: default, temp_id: 1Drafts: 1, draft_uid: default, page_id: 1
published: 1
6: 1, page_uid: О кроликах, page_url: bunniesnew: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайтDrafts: 1,
draft_uid: default, temp_id: 1Drafts: 1, draft_uid: default, page_id: 1
published: 1
7: 1, page_uid: О кроликах, page_url: bunniesnew: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт
id: 2, template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1
8: 1, page_uid: О кроликах, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт
id: 2, template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1
9: 1, page_uid: О кроликах, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 3, page_uid: Заготовочка о
пушистиках, page_url:
shushpan: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт
id: 2, template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1: 3, draft_uid:
default, page_id: 3 published: 0
10: 1, page_uid: О кроликах, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 3, page_uid: Заготовочка о
пушистиках, page_url:
shushpan: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт
id: 2, template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1: 3, draft_uid:
default, page_id: 3 published: 0: 1, resource_uid: 01.mid, isglobal: 0
11: 1, page_uid: О кроликах, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 3, page_uid: Заготовочка о
пушистиках, page_url:
shushpan: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт
id: 2, template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1: 3, draft_uid:
default, page_id: 3 published: 0
12: 1, page_uid: О кроликах, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 3, page_uid: Заготовочка о
пушистиках, page_url:
shushpan: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт
id: 2, template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1: 3, draft_uid:
default, page_id: 3 published: 0: 2, resource_uid: 02.mid, isglobal: 0
13: 1, page_uid: О кроликах, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 3, page_uid: Заготовочка о
пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: default, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1: 3, draft_uid:
default, page_id: 3 published: 0: 2, resource_uid: 02.mid, isglobal: 0
14: 1, page_uid: О кроликах…, page_url: bunniesnew: 2, page_uid: О кошечках and dogs,
page_url: pets: 3, page_uid: Заготовочка о
пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2, template_uid:
Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 1: 2, draft_uid: default, page_id: 2 published: 1: 3, draft_uid:
default, page_id: 3 published: 0: 2, resource_uid: 02.mid, isglobal: 0
15: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 1: 3, draft_uid: default, page_id: 3 published: 0: 2, resource_uid:
02.mid, isglobal: 0
16: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 1: 3, draft_uid: default, page_id: 3 published: 0: 2, resource_uid:
02.mid, isglobal: 0
17: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 0: 3, draft_uid: default, page_id: 3 published: 0: 4, draft_uid: черновичок my, page_id:
1 published: 1: 2, resource_uid: 02.mid, isglobal: 0
18: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 0: 3, draft_uid: default, page_id: 3 published: 0: 4, draft_uid: черновичок my, page_id:
1 published: 1: 5, draft_uid: черновичок my2, page_id: 1 published: 0: 2, resource_uid:
02.mid, isglobal: 0
19: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 0: 3, draft_uid: default, page_id: 3 published: 0: 4, draft_uid: черновичок my, page_id:
1 published: 1: 2, resource_uid: 02.mid, isglobal: 0
20: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 0: 3, draft_uid: default, page_id: 3 published: 0: 4, draft_uid: черновичок my, page_id:
1 published: 1: 2, resource_uid: 02.mid, isglobal: 0: 3, resource_uid:
2009-04-13-1239634885_1024x600_scrot.png, isglobal: 1
21: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 0: 3, draft_uid: default, page_id: 3 published: 0: 4, draft_uid: черновичок my, page_id:
1 published: 1: 2, resource_uid: 02.mid, isglobal: 0: 3, resource_uid:
2009-04-13-1239634885_1024x600_scrot.png, isglobal: 1: 4, resource_uid:
aleaf.jpg, isglobal: 1
22: 1, page_uid: О кроликах…, page_url: bunniesnew: 3, page_uid: Заготовочка о пушистиках, page_url:
shushpan: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.: 2,
template_uid: Содержимое и копирайт
Template Drafts: 1, draft_uid: default, temp_id:
1: 2, draft_uid: default, temp_id: 2Drafts: 1, draft_uid: Крольчатина, page_id: 1
published: 0: 3, draft_uid: default, page_id: 3 published: 1: 4, draft_uid: черновичок my, page_id:
1 published: 1: 2, resource_uid: 02.mid, isglobal: 0: 3, resource_uid:
2009-04-13-1239634885_1024x600_scrot.png, isglobal: 1: 4, resource_uid:
aleaf.jpg, isglobal: 1
МЕНЮ
Содержимое 1
Содержимое 2
Копирайт обновлённый
23
Кроликииии они такие ccccc….
@|@
Мех и мясо бла-бла
24
О кроликах…@;@bunniesnew@;@Крольчатина@,@0@;@черновичок
my@,@1@|@Заготовочка о пушистиках@;@shushpan@;@default@,@125
Меню. Содержимое 1. Содежимое 2. Копирайт.@|@Содержимое и
копирайт
Step 26
@|@2@|@327
-04-13-1239634885_1024x600_scrot.png@;@var/uploads/resources/2009-04-13-1239634885_1024x600_scrot.png@;@png@|@aleaf.jpg@;@var/uploads/resources/aleaf.jpg@;@jpg28
.mid@;@var/uploads/resources/02.mid@;@midi
Step 29
3.2 Тестирование
удаленного установщика
Автоматическое тестирование удаленного установщика
представляет определенную сложность как по скорости работы подобного
тестировщика, так и по трудозатратам на его реализацию. Поэтому тестирование
проводилось вручную.
В качестве объекта тестирования был выбран Интернет-хостинг.
Сам установщик находился на локальном сервере с выходом в Интернет.
На рисунке 4.1 представлена форма, которую заполняет
пользователь. Далее он нажимает кнопку «Установить» и ожидает завершения
установки.
Рисунок 4.1 - Система устанавливается
На рисунке 4.2 представлено успешное выполнение установки.
Рисунок 4.2 - Система установлена
Для того, чтобы удостовериться в том, что установка была
совершена, следует проверить содержимое базы данных и файловой системы на
сервере пользователя. Рисунки 4.3 и 4.4 подтверждают правильность установки.
Поэтому тестирование завершено успешно.
Рисунок 4.3 - Схема базы данных после установки
Рисунок 4.4 - Содержимое файловой системы после установки
4
Руководство пользователя
4.1 Руководство
по работе с интерфейсом для взаимодействия с клиентом
Клиент должен вызвать скрипт coordinator.php, передав ему список
необходимых параметров и их значения методом POST. Взаимодействие между
клиентом и сервером осуществляется путем передачи команд и считывания
результата их выполнения. Поэтому клиент должен всегда дожидаться ответа от
сервера. В списке параметров присутствует обязательный параметра типа
«команды», который задает необходимое для клиента действие. Все возможные
команды описаны ниже.
Формат описания: вначале идет понятное человека название
параметра и дополнительное описание, эта части выделена символами « // »; далее
идет необходимый список параметров, обрамленный « // ». До знака «=» идет
название параметра, после знака «=» - описание его значения. В квадратных
скобках может указываться сноска на примечание к конкретному параметру или его
обязательность. После списка параметров возможно наличие дополнительного
описания и примера использования.
// Добавление шаблона
// Служит для добавления новосозданного шаблона в базу
// =template_add_uid=<uid нового шаблона>_uid=<uid
черновика>
[1]_data=<html тэги взятые из body>
//
// Добавление страницы
// Служит для добавления новосозданной страницы в базу
// =page_add_uid=<uid новой страницы>_uid=<uid
связанного шаблона>_uid=<uid черновика страницы> [можно опустить для
uid по-умолчанию]_url=<url-имя страницы для генерации>
object_data=<html тэги взятые из body>
published=<true/false - публиковать ли страницу или
нет> [2]
//
// Добавление черновика
// Служит для добавления новосозданного черновика в базу
// =draft_add_uid=<uid страницы>
template_uid=<uid связанного шаблона>_uid=<uid
черновика страницы>
object_data=<html тэги взятые из body>
published=<true/false - публиковать ли страницу или
нет> [2]
//
// Сохранить шаблон
// Служит для сохранения существующего шаблона
// Присутствуют необязательные параметры
// =template_save_uid=<uid шаблона> [обязательный
параметр]_uid=<uid черновика> [1]_data=<html тэги взятые из
body>_uid=<новый uid шаблона на смену старому>
//
// Сохранить черновик страницы
// Сохраняет измененный черновик существующей страницы
// Присутствуют необязательные параметры
// =page_savedraft_uid=<uid новой страницы>
[обязательный параметр]_uid=<uid связанного шаблона> [для
черновика]_uid=<uid черновика страницы> [для черновика
обязательный]_url=<url-имя страницы для генерации>_data=<html тэги
взятые из body> [для черновика]=<true/false - публиковать ли страницу или
нет> [2] [для черновика]_draftuid=<новый uid для черновика> [для
черновика]_pageuid=<новый uid для страницы>
//
// Удалить ресурс
// Служит для удаления существующего ресурса
// Удаляется сразу с диска
// =resource_remove_uid=<uid ресурса>
//
// Удалить страницу
// Служит для удаления существующей страницы
// Удаляется сразу с диска а также все ассоциированные
черновики
// =page_remove_uid=<uid страницы>
//
// Удалить черновик страницы
// Служит для удаления существующего черновика страницы
// Удаляется сразу с диска
// =page_removedraft_uid=<uid страницы>_uid=<uid
черновика>
//
// Удалить шаблон
// Служит для удаления существующего шаблона
// =template_remove_uid=<uid шаблона>
//
// Получить шаблон
// Отдает код шаблона
//
cmd=template_get_uid=<uid шаблона>
//
// Получить черновик страницы
// Отдает код черновика страницы
// =page_getdraft_uid=<uid страницы>
draft_uid=<uid черновика>
//
// Получить данные о страницах для ЦУП
// =mcc_get_pages
// Возвращает:
// Формат:
// page_uid; page_url; draft1, published; draft2,
published|page_uid; page_url; draft1, published
// Пример:
// О кроликах…; bunniesnew; Крольчатина, 0; черновичок my, 1; черновичок my2,0|Заготовочка о пушистиках; shushpan;
default, 0|
// где | - разделитель нормальный
// ; - подразделитель
// , - подподразделитель
// Разделитель не обязательно имеет указанный вид, поэтому
должен быть глобальной переменной!
//
// Получить данные о шаблонах для ЦУП
// =mcc_get_templates
// Возвращает:
// Формат:
// template_uid@|@template_uid@|@template_uid
// Пример:
// Меню. Содержимое 1. Содежимое 2. Копирайт.@|@Содержимое и
копирайт
// где @|@ - разделитель нормальный
// Разделитель не обязательно имеет указанный вид, поэтому
должен быть глобальной переменной!
//
// Получить общие данные для ЦУП
//
cmd=mcc_get_status
// Возвращает:
// Формат:
// templates_count@|@pages_count@|@resources_count
// Пример:
// 2@|@2@|@3
// где @|@ - разделитель нормальный
// Разделитель не обязательно имеет указанный вид, поэтому
должен быть глобальной переменной!
//
// Получить данные о ресурсах для ЦУП или Редактора
// Присутствуют необязательные параметры
// =resources_get_type=<страница или шаблон
(p/t)>_uid=<uid страницы или шаблона>
// Два последних параметра необязательны. Если они не
указаны, то извлекаются
// все глобальные ресурсы. Если указаны, то только ресурсы
специфицированной
// страницы или шаблона.
//
// Возвращает:
// Формат:
// resource_uid@;@path@;@type@|@resource_uid@;@path@;@type
// Пример:
//
2009-04-13-1239634885_1024x600_scrot.png@;@/data/projects/projectx/svn/trunk/var/uploads/resources/2009-04-13-1239634885_1024x600_scrot.png@;@png@|@aleaf.jpg@;@/data/projects/projectx/svn/trunk/var/uploads/resources/aleaf.jpg@;@jpg
// @;@ - подразделитель
// Разделитель не обязательно имеет указанный вид, поэтому
должен быть глобальной переменной!
//
[1] В данной версии шаблон имеет только один черновик с
uid=default,
поэтому данный параметр можно опустить.
[2] В случае публикации страница сразу же сгенерируется.
Во всех случаях, если не оговорено иное, при успешном
выполнении операции сервер возвращает сообщение «OK». Булевы параметры
передаются в текстовом виде строчными латинскими буквами: «true» или «false»
Загрузка ресурсов осуществляется не напрямую через
координатор, а через скрипт загрузки resource_uploader.php, который сам
обращается к координатору. Ниже представлена минимальная html-форма для реализации
загрузки ресурсов.
<form enctype= «multipart/form-data» action= «resource_uploader.php» method= «post»>
<input type= «hidden» name= «MAX_FILE_SIZE»
value= «300000»>
<input type= «hidden» name= «type» value=
«midi»>
<input type= «hidden» name= «isglobal» value=
«false»>
<input type= «hidden» name= «usedin_type»
value= «page»>
<input type= «hidden» name= «usedin_uid»
value= «mynewpage01»>this file: <input name= «resource» type= «file»>
<input type= «submit» value= «Send File»>
</form>
4.2 Руководство
по работе с удаленным установщиком
Удаленный установщик следует разместить в той же папке, где
находится система создания и управления сайтами. В папке установщика следует
изменить файл files, указав в нем все копируемые на FTP файлы и папки. Пример:
.php
/coordinator.php/resource_uploader.php/install.php
/dbm/dbm/dbm.php
Далее следует отредактировать файл permissions1, в котором
выставить специальные права доступа на отдельные файлы или папки, присваиваемые
до вызова установщика базы данных, в виде:
.php 0640,
где 0640 - права доступа к файлу в восьмиричном виде.
В завершении надо отредактировать файл permissions2, выставив
специальные права доступа на отдельные файлы или папки, присваиваемые после
вызова установщика базы данных.
Также убедитесь, что папка tmp доступна для записи php-интерпретатору.
Запуск установщика производится через файл installer.html.
Заключение
В ходе дипломного проекта была создана серверная часть
системы создания и управления сайтами, в которой:
· реализовано полное кэширование страниц в
файловую систему, ускоряя доступ к ним;
· разработана понятная пользователю
структура файловой системы, отражающая основные логические блоки системы
создания и управления сайтами;
· создан интерфейс для простого и легкого
соединения сервера с клиентом;
· реализована возможность быстрой адаптации
системы под различные СУБД.
А также создан простой установщик системы, устраняющий для
пользователя необходимость загружать файлы системы по FTP и выставлять права
доступа к ним.
В будущем предполагается дальнейшее развитие и совершенствование
системы создания и управления сайтами, и внедрение ее на рынок систем данного
класса в сети Интернет.
Библиография
1 The CMS Matrix [Электронный ресурс] / Обзор и сравнение
современных CMS. - Режим доступа: http://www.cmsmatrix.org/. - Загл. с экрана. -
яз. англ.
2 GOOGLE [Электронный ресурс] / Мультиязыковой Интернет-поисковик. -
Режим доступа: http://google.ru/. - Загл. с экрана. - яз. рус., англ.
Wikipedia,
the free encyclopedia [Электронный ресурс]: Cвободная общедоступная
многоязычная универсальная энциклопедия. - Режим доступа:
http://en.wikipedia.org/wiki/Main_Page. - Загл. с экрана. - яз. англ.
4 HTMLBOOK.RU [Электронный ресурс] / Сайт посвященный языку HTML, CSS,
веб-дизайну, графике и процессу создания сайтов. - Режим доступа: http://htmlbook.ru/.
- Загл. с экрана. - яз. рус.
PHP Manual [Электронный ресурс] /
Официальная документация PHP. - Режим доступа: http://www.php.net/manual/en/.
- Загл. с экрана. - яз. англ.
6 W3Schools [Электронный ресурс] / Портал для веб-разработчиков. - Режим
доступа: http://www.w3schools.com/. - Загл. с экрана. - яз. англ.
СанПиН
2.2.2/2.4.1340-03 [Электронный ресурс] / Санитарные правила и нормы. Режим
доступа: http://www.niiot.ru/doc/doc055/doc_00.htm. - Загл. с экрана. - яз.
рус.
Приложение
Исходный код координатора (coordinator.php)
<? php
_once ('../config.php');_once
('stm/stm.php');_once ('lib/strbool.php');
$stm = new StorageManager ($config_storage_type,
$config_db_host, $config_db_user,
$config_db_password, $config_db_name);
$cmd = $_POST['cmd'];
($cmd)
{
// Adding absolutely new project«project_add»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];$stm->AddProject
($project_uid);
};
// Adding newly uploaded resource«resource_add»:
{
$uid = $_POST['uid'];
$isglobal = $_POST['isglobal'];
$path = $_POST['path'];
$type = $_POST['type'];
$usedin_type = $_POST ['usedin_type'];
$usedin_uid = $_POST ['usedin_uid'];(! isset
($_POST['project_uid'])) $project_uid = «default»;$project_uid = $_POST ['project_uid'];
// If resource is
global(strbool:istrue($isglobal))
{$stm->AddResource ($uid,
strbool:tobool($isglobal), $path,
$type, $project_uid);
}
{$stm->AddResource ($uid,
strbool:tobool($isglobal), $path,
$type, $project_uid, $usedin_uid, $usedin_type);
}
};
// Adding absolutely new template«template_add»:
{
$template_uid = $_POST ['template_uid'];(! isset
($_POST['draft_uid'])) $draft_uid = «default»;$draft_uid = $_POST
['draft_uid'];(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$creation_time = time();
$modification_time = $creation_time;
$object_data = stripslashes
($_POST['object_data']);$stm->AddTemplate ($template_uid, $draft_uid,
$creation_time,
$modification_time, $object_data, $project_uid);
};
// Adding absolutely new page«page_add»:
{
$page_uid = $_POST ['page_uid'];(! isset
($_POST['draft_uid'])) $draft_uid = «default»;$draft_uid = $_POST
['draft_uid'];(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$template_uid = $_POST ['template_uid'];
$creation_time = time();
$modification_time = $creation_time;
$page_url = $_POST ['page_url'];
$object_data = stripslashes
($_POST['object_data']);
$published = $_POST['published'];
$generated_modification_time = 0;
$generated_draft_uid =
$draft_uid;$stm->AddPage ($page_uid, $draft_uid, $template_uid,
$creation_time,
$modification_time, $page_url,
$object_data, $published,
$generated_modification_time,
$generated_draft_uid,
$project_uid);
};
// Saving template«template_save»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];(! isset
($_POST['template_uid'])) die («Not valid arguments»);
$template_uid = $_POST ['template_uid'];(! isset
($_POST['draft_uid'])) $draft_uid = «default»;$draft_uid = $_POST
['draft_uid'];
$modification_time = FALSE;
$object_data = FALSE;
$new_uid = FALSE;
$modification_time = time();(isset
($_POST['object_data'])) $object_data = stripslashes
($_POST['object_data']);(isset ($_POST['new_uid'])) $new_uid = $_POST
['new_uid'];$stm->SaveTemplate ($project_uid, $template_uid, $draft_uid,
$modification_time, $object_data, $new_uid);
};
// Saving page draft«page_savedraft»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];(! isset ($_POST['page_uid']))
die («Not valid arguments»);
$page_uid = $_POST ['page_uid'];
$draft_uid = FALSE;(isset ($_POST['draft_uid']))
$draft_uid = $_POST ['draft_uid'];
$template_uid = FALSE;
$page_url = FALSE;
$object_data = FALSE;
$published = FALSE;
$modification_time = time();
$new_draftuid = FALSE;
$new_pageuid = FALSE;(isset
($_POST['template_uid'])) $template_uid = $_POST ['template_uid'];(isset
($_POST['page_url'])) $page_url = $_POST ['page_url'];(isset
($_POST['object_data'])) $object_data = stripslashes
($_POST['object_data']);(isset ($_POST['published'])) $published =
$_POST['published'];(isset ($_POST['new_draftuid'])) $new_draftuid = $_POST
['new_draftuid'];(isset ($_POST['new_pageuid'])) $new_pageuid = $_POST
['new_pageuid'];$stm->SavePageDraft ($project_uid, $page_uid, $draft_uid,
$template_uid,
$modification_time, $page_url,
$object_data, $published,
$new_draftuid, $new_pageuid);
};
// Adding absolutely new draft«page_adddraft»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$page_uid = $_POST ['page_uid'];
$draft_uid = $_POST ['draft_uid'];
$template_uid = $_POST ['template_uid'];
$creation_time = time();
$modification_time = $creation_time;
//TODO: make defaults for object_data
$object_data = stripslashes
($_POST['object_data']);
$published =
$_POST['published'];$stm->AddDraft ($project_uid, $page_uid, $draft_uid,
$template_uid,
$creation_time, $modification_time,
$object_data, $published);
};
// Remove resource«resource_remove»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$resource_uid = $_POST
['resource_uid'];$stm->RemoveResource ($project_uid, $resource_uid, TRUE);
};
// Remove page«page_remove»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$page_uid = $_POST
['page_uid'];$stm->RemovePage ($project_uid, $page_uid, TRUE);
};
// Remove page draft«page_removedraft»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$page_uid = $_POST ['page_uid'];
$draft_uid = $_POST
['draft_uid'];$stm->RemoveDraft ($project_uid, $page_uid, $draft_uid, TRUE);
};
// Remove template«template_remove»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$template_uid = $_POST
['template_uid'];$stm->RemoveTemplate ($project_uid, $template_uid);
};
// Get template«template_get»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$template_uid = $_POST ['template_uid'];(! isset
($_POST['draft_uid'])) $draft_uid = «default»;$draft_uid = $_POST
['draft_uid'];$stm->GetTemplate ($project_uid, $template_uid, $draft_uid);
};
// Get page draft«page_getdraft»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$page_uid = $_POST ['page_uid'];(! isset
($_POST['draft_uid'])) $draft_uid = «default»;$draft_uid = $_POST
['draft_uid'];$stm->GetPageDraft ($project_uid, $page_uid, $draft_uid);
};
// Get pages info for MCC«mcc_get_pages»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];$stm->MccGetPages
($project_uid);
};
// Get templates info for MCC«mcc_get_templates»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];$stm->MccGetTemplates
($project_uid);
};
// Get common info for MCC«mcc_get_status»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];$stm->MccGetStatus
($project_uid);
};
// Get resources info for MCC or
Editor«resources_get»:
{(! isset ($_POST['project_uid'])) $project_uid =
«default»;$project_uid = $_POST ['project_uid'];
$usedin_type = FALSE;
$usedin_uid = FALSE;(isset
($_POST['usedin_type'])) $usedin_type = $_POST ['usedin_type'];(isset
($_POST['usedin_uid'])) $usedin_uid = $_POST
['usedin_uid'];$stm->GetResources ($project_uid, $usedin_type, $usedin_uid);
};
:
{«Bad command.»;
}
}
($stm);
$_POST = array();
?>
Приложение В
Исходный код автоматической системы тестирования (dummy.php)
<? php
_once ('install.php');_once
('../config.php');_once ('lib/strbool.php');
$verbose = TRUE;
$step = 1;showdb()
{$verbose;(!$verbose) return;_once
('dbm/dbm.php');$config_db_host, $config_db_user, $config_db_password,
$config_db_name;
$dbm = new MysqlDbm ($config_db_host,
$config_db_user, $config_db_password);
$dbm->SelectDatabase ($config_db_name);
$step;«<br><b><u><i>Step».$step.
«</i></u></b><br>»;
$res = $dbm->GetTable
(array('pages'));«<b><u>Pages</u></b><br>»;($row
= mysql_fetch_array ($res, MYSQL_NUM))
{(«<b>id:</b>%s,
<b>page_uid:</b>%s, <b>page_url:</b>%s<br>»,
$row[0], $row[1], $row[4]);
}
$res = $dbm->GetTable
(array('templates'));«<b><u>Templates</u></b><br>»;($row
= mysql_fetch_array ($res, MYSQL_NUM))
{(«<b>id:</b>%s,
<b>template_uid:</b>%s<br>», $row[0], $row[1]);
}
$res = $dbm->GetTable (array('template_drafts'));«<b><u>Template
Drafts</u></b><br>»;($row = mysql_fetch_array ($res,
MYSQL_NUM))
{(«<b>id:</b>%s,
<b>draft_uid:</b>%s, <b>temp_id:</b>%s<br>»,
$row[0], $row[1], $row[2]);
}
$res = $dbm->GetTable
(array('page_drafts'));«<b><u>Page Drafts</u></b><br>»;($row
= mysql_fetch_array ($res, MYSQL_NUM))
{(«<b>id:</b>%s,
<b>draft_uid:</b>%s, <b>page_id:</b>%s
<b>published:</b>%s<br>», $row[0], $row[1], $row[7],
$row[6]);
}
$res = $dbm->GetTable
(array('resources'));«<b><u>Resources</u></b><br>»;($row
= mysql_fetch_array ($res, MYSQL_NUM))
{(«<b>id:</b>%s,
<b>resource_uid:</b>%s, <b>isglobal:</b>%s<br>»,
$row[0], $row[1], $row[2]);
}($dbm);«<br>»;
$step += 1;
}
showsteponly()
{$verbose;(!$verbose)
return;$step;«<br><b><u><i>Step».$step.
«</i></u></b><br>»;«<br>»;
$step += 1;
}
();
$_POST['cmd'] =
«project_add»;('coordinator.php');();
$_POST['cmd'] = «template_add»;
$_POST ['template_uid'] = «Меню, содержимое 1, содежимое 2, копирайт»;
$_POST ['draft_uid'] = «default»;
$_POST ['object_data'] = '<div id=
«menu»>МЕНЮ</div><div id= «text1» editable= «true»>Содержимое
1</div><div id= «text2» editable= «true»>Содержимое
2</div><div id= «copy»>Копирайт</div>';('coordinator.php');();
$_POST['cmd'] = «page_add»;
$_POST ['page_uid'] = «О кроликах»;
$_POST ['template_uid'] = «Меню, содержимое 1,
содежимое 2, копирайт»;
// $_POST ['draft_uid'] = «default»;
$_POST ['page_url'] = «bunnies»;
$_POST ['object_data'] = '<div id=
«text1»>Кроликииии они такие….</div>'.$config_delim_normal.'<div
id= «text2»>Мех и мясо бла-бла</div>';
$_POST['published'] =
strbool:get_true();('coordinator.php');();
$_POST['cmd'] = «template_save»;
$_POST ['template_uid'] = «Меню, содержимое 1, содежимое 2, копирайт»;
$_POST ['object_data'] = '<div id= «menu»>МЕНЮ</div><div id= «text1» editable= «true»>Содержимое 1</div><div id= «text2» editable= «true»>Содержимое 2</div><div id= «copy»>Копирайт
обновлённый</div>';
require ('coordinator.php');();
$_POST['cmd'] = «page_savedraft»;
$_POST ['page_uid'] = «О кроликах»;
$_POST ['template_uid'] = «Меню, содержимое 1,
содежимое 2, копирайт»;
$_POST ['draft_uid'] = «default»;
$_POST ['page_url'] = «bunniesnew»;
$_POST ['object_data'] = '<div id=
«text1»>Кроликииии они такие….</div>'.$config_delim_normal.'<div
id= «text2»>Мех и мясо бла-бла, обновлено</div>';
$_POST['published'] =
strbool:get_true();('coordinator.php');();
////////////////////////////////////////
$_POST['cmd'] = «template_add»;
$_POST ['template_uid'] = «Содержимое и
копирайт»;
$_POST ['object_data'] = '<div id= «text»
editable= «true»></div><div id=
«copy»>Копирайт</div>';('coordinator.php');();
$_POST['cmd'] = «page_add»;
$_POST ['page_uid'] = «О кошечках and dogs»;
$_POST ['template_uid'] = «Содержимое и
копирайт»;
$_POST ['draft_uid'] = «default»;
$_POST ['page_url'] = «pets»;
$_POST ['object_data'] = '<div id=
«text»>Some info about blah-blah</div>';
$_POST['published'] =
strbool:get_true();('coordinator.php');();
$_POST['cmd'] = «page_add»;
$_POST ['page_uid'] = «Заготовочка о пушистиках»;
$_POST ['template_uid'] = «Содержимое и
копирайт»;
$_POST ['draft_uid'] = «default»;
$_POST ['page_url'] = «shushpan»;
$_POST ['object_data'] = '<div id=
«text»>Шушпанчики…</div>';
$_POST['published'] =
strbool:get_false();('coordinator.php');();
////////////////////////////////////////
$_POST['cmd'] = «resource_add»;
$_POST['uid'] = «01.mid»;
$_POST['isglobal'] = strbool:get_false();
$_POST['path'] = «var/uploads/resources/01.mid»;
$_POST['type'] = «midi»;
$_POST ['usedin_type'] = «page»;
$_POST ['usedin_uid'] = «Заготовочка о пушистиках»;
require ('coordinator.php');();
$_POST['cmd'] = «resource_remove»;
$_POST ['resource_uid'] =
«01.mid»;('coordinator.php');();
$_POST['cmd'] = «resource_add»;
$_POST['uid'] = «02.mid»;
$_POST['isglobal'] = strbool:get_false();
$_POST['path'] = «var/uploads/resources/02.mid»;
$_POST['type'] = «midi»;
$_POST ['usedin_type'] = «page»;
$_POST ['usedin_uid'] = «Заготовочка о пушистиках»;
require ('coordinator.php');();
//////////////////////////////////
$_POST['cmd'] = «template_save»;
$_POST ['template_uid'] = «Меню, содержимое 1, содежимое 2, копирайт»;
$_POST ['object_data'] = '<div id= «menu»>МЕНЮ</div><div id= «text1» editable= «true»>Содержимое 1</div><div id= «text2» editable= «true»>Содержимое 2</div><div id= «copy»>Копирайт
обновлённый</div>';
$_POST ['new_uid'] = «Меню. Содержимое 1. Содежимое 2. Копирайт.»;('coordinator.php');();
$_POST['cmd'] = «page_savedraft»;
$_POST ['page_uid'] = «О кроликах»;
$_POST ['template_uid'] = «Меню. Содержимое 1.
Содежимое 2. Копирайт.»;
$_POST ['draft_uid'] = «default»;
$_POST ['page_url'] = «bunniesnew»;
$_POST ['object_data'] = '<div id=
«text1»>Кроликииии они такие….</div>'.$config_delim_normal.'<div
id= «text2»>Мех и мясо бла-бла, обновлено</div>';
$_POST['published'] = strbool:get_true();
$_POST ['new_draftuid'] = «Крольчатина»;
$_POST ['new_pageuid'] = «О
кроликах…»;('coordinator.php');();
$_POST['cmd'] = «page_remove»;
$_POST ['page_uid'] = «О кошечках and
dogs»;('coordinator.php');();
$_POST['cmd'] = «template_remove»;
$_POST ['template_uid'] = «О кошечках and
dogs»;('coordinator.php');();
$_POST['cmd'] = «page_adddraft»;
$_POST ['page_uid'] = «О кроликах…»;
$_POST ['template_uid'] = «Меню. Содержимое 1. Содежимое
2. Копирайт.»;
$_POST ['draft_uid'] = «черновичок my»;
$_POST ['object_data'] = '<div id= «text1»>Кроликииии они такие ccccc….</div>'.$config_delim_normal.'<div id= «text2»>Мех и мясо
бла-бла</div>';
$_POST['published'] =
strbool:get_true();('coordinator.php');();
$_POST['cmd'] = «page_adddraft»;
$_POST ['page_uid'] = «О кроликах…»;
$_POST ['template_uid'] = «Меню. Содержимое 1. Содежимое
2. Копирайт.»;
$_POST ['draft_uid'] = «черновичок my2»;
$_POST ['object_data'] = '<div id= «text1»>Кроликииии они такие бдя….</div>'.$config_delim_normal.'<div id= «text2»>Мех и мясо
бла-бла</div>';
$_POST['published'] =
strbool:get_false();('coordinator.php');();
$_POST['cmd'] = «page_removedraft»;
$_POST ['page_uid'] = «О кроликах…»;
$_POST ['draft_uid'] = «черновичок my2»;('coordinator.php');();
$_POST['cmd'] = «resource_add»;
$_POST['uid'] =
«2009-04-13-1239634885_1024x600_scrot.png»;
$_POST['isglobal'] = strbool:get_true();
$_POST['path'] =
«var/uploads/resources/2009-04-13-1239634885_1024x600_scrot.png»;
$_POST['type'] = «png»;('coordinator.php');();
$_POST['cmd'] = «resource_add»;
$_POST['uid'] = «aleaf.jpg»;
$_POST['isglobal'] = strbool:get_true();
$_POST['path'] =
«var/uploads/resources/aleaf.jpg»;
$_POST['type'] = «jpg»;('coordinator.php');();
$_POST['cmd'] = «page_savedraft»;
$_POST ['page_uid'] = «Заготовочка о пушистиках»;
$_POST ['draft_uid'] = «default»;
$_POST['published'] =
strbool:get_true();('coordinator.php');();
$_POST['cmd'] = «template_get»;
$_POST ['template_uid'] = «Меню. Содержимое 1.
Содежимое 2. Копирайт.»;
$_POST ['draft_uid'] =
«default»;('coordinator.php');();
$_POST['cmd'] = «page_getdraft»;
$_POST ['page_uid'] = «О кроликах…»;
$_POST ['draft_uid'] = «черновичок
my»;('coordinator.php');();
$_POST['cmd'] =
«mcc_get_pages»;('coordinator.php');();
«<br>»;
$_POST['cmd'] =
«mcc_get_templates»;('coordinator.php');();
«<br>»;
$_POST['cmd'] =
«mcc_get_status»;('coordinator.php');();
«<br>»;
$_POST['cmd'] =
«resources_get»;('coordinator.php');();
«<br>»;
$_POST['cmd'] = «resources_get»;
$_POST ['usedin_type'] = 'p';
$_POST ['usedin_uid'] = 'Заготовочка о
пушистиках';('coordinator.php');();
?>
Приложение
Исходный код менеджера хранилища (stm.php)
<? php
_once ('lib/valcheck.php');_once
('dbm/dbm.php');_once ('generator/generator.php');_once ('../config.php');
// Interface between actual database and
coordinator
// AddResource, AddTemplate, AddPage,
SaveTemplate, SavePageDraft,StorageManager
{$dbm = NULL;$db_tables_projects =
«projects»;$db_tables_resources = «resources»;$db_tables_resource_usedin =
«resource_usedin»;$db_tables_templates = «templates»;$db_tables_template_drafts
= «template_drafts»;$db_tables_pages = «pages»;$db_tables_page_drafts =
«page_drafts»;$db_name = «»;
__construct ($storage_type, $db_host, $db_user,
$db_password, $db_name)
{
$this->db_name = $db_name;
// Creating appropriate db
connector($storage_type)
{«mysql»:
{
$this->dbm = new MysqlDbm ($db_host, $db_user,
$db_password);
};:
{(«Cannot create storage.»);
}
}
// Adding new projectAddProject ($project_uid)
{
// Checking if input is correct(! valcheck:isuid
($project_uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
// Adding project
$vals = array ('project_uid'=>$project_uid);
$this->dbm->AddData
($this->db_tables_projects, $vals);«OK»;
}
// Adding new resourceAddResource ($uid,
$isglobal, $path, $type, $project_uid,
$usedin_uid = NULL, $usedin_type = NULL)
{
// Checking if input is correct(!
valcheck:isuid($uid) ||! is_bool($isglobal) ||
! valcheck:issystempath($path) ||!
valcheck:isalpha($type) ||
! valcheck:isuid ($project_uid))
{«Bad input 1»;
}(!$isglobal && (! valcheck:isuid
($usedin_uid) ||
! valcheck:isalpha ($usedin_type)))
{«Bad input 2»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$vals = array ('resource_uid'=>$uid,
'isglobal'=>$isglobal,
'path'=>$path,
'data_type'=>$type,
'project_id'=>$project_id);
$this->dbm->AddData
($this->db_tables_resources, $vals);(!$isglobal)
{
// Getting resource id from uid
$id = $this->getIdByUidCond
($this->db_tables_resources, 'resource_uid', $uid, 'project_id',
$project_id);
// Getting usedin id from uid($usedin_type ==
«page»)
{
$usedin_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $usedin_uid, 'project_id',
$project_id);
}
{
$usedin_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $usedin_uid, 'project_id',
$project_id);
}
// Adding links
$vals = array ('resource_id'=>$id,
'usedin_id'=>$usedin_id,
'usedin_type'=>$usedin_type);
$this->dbm->AddData
($this->db_tables_resource_usedin, $vals);
}«OK»;
}
// Adding new templateAddTemplate ($template_uid,
$draft_uid, $creation_time,
$modification_time, $object_data, $project_uid)
{
// Checking if input is correct(! valcheck:isuid
($template_uid) ||! valcheck:isuid ($draft_uid) ||
! valcheck:isunixtime ($creation_time) ||
! valcheck:isunixtime ($modification_time) ||
! valcheck:isobjectdata ($object_data) ||
! valcheck:isuid ($project_uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
// Adding template
$vals = array ('template_uid'=>$template_uid,
'project_id'=>$project_id);
$this->dbm->AddData ($this->db_tables_templates,
$vals);
// Getting template id from uid
$template_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $template_uid, 'project_id',
$project_id);
// Adding template draft
$vals = array ('draft_uid'=>$draft_uid,
'template_id'=>$template_id,
'creation_time'=>$creation_time,
'modification_time'=>$modification_time,
'object_data'=>$object_data);
$this->dbm->AddData
($this->db_tables_template_drafts, $vals);«OK»;
}
// Adding new pageAddPage ($page_uid, $draft_uid,
$template_uid, $creation_time,
$modification_time, $page_url, $object_data,
$published,
$generated_modification_time,
$generated_draft_uid,
$project_uid)
{
// Checking if input is correct(! valcheck:isuid
($page_uid) ||! valcheck:isuid ($draft_uid) ||
! valcheck:isuid ($template_uid) ||!
valcheck:isurl ($page_url) ||
! valcheck:isunixtime ($creation_time) ||
! valcheck:isunixtime ($modification_time) ||
! valcheck:isobjectdata ($object_data) ||!
is_bool (strbool:tobool($published)) ||
! valcheck:isunixtime
($generated_modification_time) ||
! valcheck:isuid ($generated_draft_uid) ||
! valcheck:isuid ($project_uid))
{«Bad input»;
}
// Adding page
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$vals = array ('page_uid'=>$page_uid,
'generated_modification_time'=>$generated_modification_time,
'generated_draft_uid'=>$generated_draft_uid,
'page_url'=>$page_url,
'project_id'=>$project_id);
$this->dbm->AddData ($this->db_tables_pages,
$vals);
// Getting template id from uid
$template_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $template_uid, 'project_id',
$project_id);
// Getting page id from uid
$page_id = $this->getIdByUidCond ($this->db_tables_pages,
'page_uid', $page_uid, 'project_id', $project_id);
// Adding page draft
$vals = array ('draft_uid'=>$draft_uid,
'template_id'=>$template_id,
'creation_time'=>$creation_time,
'modification_time'=>$modification_time,
'object_data'=>$object_data,
'published'=>strbool:tobool($published),
'page_id'=>$page_id);
$this->dbm->AddData
($this->db_tables_page_drafts, $vals);
$this->PublishPage ($project_id,
$page_uid);«OK»;
}
// Adding new draftAddDraft ($project_uid,
$page_uid, $draft_uid, $template_uid,
$creation_time, $modification_time, $object_data,
$published)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||
! valcheck:isuid ($page_uid) ||! valcheck:isuid
($draft_uid) ||
! valcheck:isuid ($template_uid) ||
! valcheck:isunixtime ($creation_time) ||
! valcheck:isunixtime ($modification_time) ||
! valcheck:isobjectdata ($object_data) ||
! is_bool (strbool:tobool($published)))
{«Bad input»;
}
$this->dbm->SelectDatabase ($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
// Getting template id from uid
$template_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $template_uid, 'project_id',
$project_id);($template_id == 0) return «Bad template uid»;
// Getting page id from uid
$page_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $page_uid, 'project_id',
$project_id);($page_id == 0) return «Bad page uid»;(strbool:istrue($published))
{
// Unpublish all drafts
$table_name = $this->db_tables_page_drafts;
$new_data = array ('published'=>FALSE);
$condition = array ('page_id'=>$page_id);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
}
// Adding page draft
$vals = array ('draft_uid'=>$draft_uid,
'template_id'=>$template_id,
'creation_time'=>$creation_time,
'modification_time'=>$modification_time,
'object_data'=>$object_data,
'published'=>strbool:tobool($published),
'page_id'=>$page_id);
$this->dbm->AddData ($this->db_tables_page_drafts,
$vals);
$this->PublishPage ($project_id,
$page_uid);«OK»;
}
// Save templateSaveTemplate ($project_uid,
$template_uid, $draft_uid,
$modification_time = FALSE,
$object_data = FALSE,
$new_uid = FALSE)
{
// Checking if input is correct(! valcheck:isuid
($template_uid) ||! valcheck:isuid ($draft_uid) ||
! valcheck:isuid ($project_uid))
{«Bad input 1»;
}(($modification_time &&!
valcheck:isunixtime ($modification_time)) ||
($object_data &&! valcheck:isobjectdata
($object_data)) ||
($new_uid &&! valcheck:isuid ($new_uid)))
{«Bad input 2»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
// Getting template id from uid
$template_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $template_uid, 'project_id',
$project_id);
// Update template draft
$table_name =
$this->db_tables_template_drafts;
$new_data = array();($modification_time)
$new_data ['modification_time'] = $modification_time;($object_data) $new_data
['object_data'] = $object_data;
$condition = array
('template_id'=>$template_id,
'draft_uid'=>$draft_uid);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
// Change uid of template($new_uid)
{
$table_name = $this->db_tables_templates;
$new_data = array ('template_uid'=>$new_uid);
$condition = array ('id'=>$template_id);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
}«OK»;
}
// Saving page draftSavePageDraft ($project_uid,
$page_uid, $draft_uid,
$template_uid = FALSE,
$modification_time = FALSE,
$page_url = FALSE,
$object_data = FALSE,
$published = FALSE,
$new_draftuid = FALSE,
$new_pageuid = FALSE)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||! valcheck:isuid ($page_uid))
{«Bad input 1»;
}(($draft_uid &&! valcheck:isuid
($draft_uid)) ||
($template_uid &&! valcheck:isuid
($template_uid)) ||
($page_url &&! valcheck:isurl
($page_url)) ||
($modification_time &&! valcheck:isunixtime
($modification_time)) ||
($object_data &&! valcheck:isobjectdata
($object_data)) ||
($published &&! is_bool
(strbool:tobool($published))) ||
($new_draftuid &&! valcheck:isuid
($new_draftuid)) ||
($new_pageuid &&! valcheck:isuid
($new_pageuid)))
{«Bad input 2»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
// Assume url won't change
$old_page_url = FALSE;($page_url)
{
// Getting old url to delete old data
$what = array ('page_url');
$from = array ($this->db_tables_pages);
$condition = array ('page_uid'=>$page_uid);
$row = $this->dbm->GetData ($what, $from,
$condition);
$old_page_url = $row[0];
// Updating url
$table_name = $this->db_tables_pages;
$new_data = array ('page_url'=>$page_url);
$condition = array ('page_uid'=>$page_uid);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
}($draft_uid)
{
$page_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $page_uid, 'project_id', $project_id);
$draft_id = $this->getIdByUidCond
($this->db_tables_page_drafts, 'draft_uid', $draft_uid, 'page_id',
$page_id);
// Updating draft
$table_name = $this->db_tables_page_drafts;
$new_data = array();($modification_time)
$new_data ['modification_time'] = $modification_time;($object_data) $new_data
['object_data'] = $object_data;($published)
{(strbool:istrue($published))
{
// Unpublish all drafts
$table_name = $this->db_tables_page_drafts;
$new_data = array ('published'=>FALSE);
$condition = array ('page_id'=>$page_id);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
}
$new_data['published'] =
strbool:tobool($published);
}($template_uid)
{
$template_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $template_uid, 'project_id',
$project_id);($template_id == 0)«Error. No such template.»;
$new_data ['template_id'] = $template_id;
}($new_draftuid)
{
$new_data ['draft_uid'] = $new_draftuid;
$draft_uid = $new_draftuid;
}
$condition = array ('id'=>$draft_id);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
// Change uid of page($new_pageuid)
{
$table_name = $this->db_tables_pages;
$new_data = array ('page_uid'=>$new_pageuid);
$condition = array ('id'=>$page_id);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
$page_uid = $new_pageuid;
}
}
$this->PublishPage ($project_id, $page_uid,
$old_page_url);«OK»;
}
function PublishPage ($project_id, $page_uid,
$old_page_url = FALSE)
{
// Getting page id from uid
$page_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $page_uid, 'project_id', $project_id);
// Getting page url
$what = array ('page_url');
$from = array ($this->db_tables_pages);
$condition = array ('id'=>$page_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$page_url = $row[0];
// Getting draft uid
$what = array ('draft_uid');
$from = array ($this->db_tables_page_drafts);
$condition = array ('page_id'=>$page_id,
'published'=>TRUE);
$row = $this->dbm->GetData ($what, $from,
$condition);
$draft_uid = $row[0];
// If no drafts to publish, remove previous from
disk(empty ($draft_uid))
{
$gen = new Generator();
$gen->RemovePage ($page_url);FALSE;
}
$draft_id = $this->getIdByUidCond
($this->db_tables_page_drafts, 'draft_uid', $draft_uid, 'page_id',
$page_id);
// Getting page draft data
$what = array ('object_data', 'template_id',
'modification_time');
$from = array ($this->db_tables_page_drafts);
$condition = array ('id'=>$draft_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$page_data = $row[0];
$template_id = $row[1];
$modification_time = $row[2];
// Getting template data
$what = array ('object_data');
$from = array
($this->db_tables_template_drafts);
$condition = array
('template_id'=>$template_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$template_data = $row[0];
// Generate pae
$gen = new Generator();
$gen->GeneratePage ($page_url, $page_data,
$template_data, $old_page_url);
// Update generation time
$generated_modification_time =
$modification_time;
$generated_draft_uid = $draft_uid;
$table_name = $this->db_tables_pages;
$new_data = array ('generated_modification_time'=>$generated_modification_time,
'generated_draft_uid'=>$generated_draft_uid);
$condition = array ('page_uid'=>$page_uid);
$this->dbm->UpdateData ($table_name,
$new_data, $condition);
}
// Removes resourceRemoveResource ($project_uid,
$uid, $fromdisk = FALSE)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||! valcheck:isuid($uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);($fromdisk)
{
// Getting resource path
$what = array('path');
$from = array ($this->db_tables_resources);
$condition = array ('resource_uid'=>$uid,
'project_id'=>$project_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$path = $row[0];
// Removing resource
$gen = new Generator();
$gen->RemoveResourceFile($path);
}
// Removing links to resource
$resource_id = $this->getIdByUidCond
($this->db_tables_resources, 'resource_uid', $uid, 'project_id',
$project_id);
$table_name = $this->db_tables_resource_usedin;
$condition = array
('resource_id'=>$resource_id);
$this->dbm->RemoveData ($table_name,
$condition);
// Removing resource
$table_name = $this->db_tables_resources;
$condition = array ('resource_uid'=>$uid);
$this->dbm->RemoveData ($table_name,
$condition);«OK»;
}
// Removes pageRemovePage ($project_uid, $uid,
$fromdisk = FALSE)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||! valcheck:isuid($uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);($fromdisk)
{
// Getting page url
$what = array ('page_url');
$from = array ($this->db_tables_pages);
$condition = array ('page_uid'=>$uid,
'project_id'=>$project_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$url = $row[0];
// Removing page
$gen = new Generator();
$gen->RemovePage($url);
// Removing drafts
$page_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $uid, 'project_id', $project_id);
$table_name = $this->db_tables_page_drafts;
$condition = array ('page_id'=>$page_id);
$this->dbm->RemoveData ($table_name,
$condition);
// Removing page
$table_name = $this->db_tables_pages;
$condition = array ('page_uid'=>$uid);
$this->dbm->RemoveData ($table_name,
$condition);«OK»;
}
// Removes templateRemoveTemplate ($project_uid,
$uid)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||! valcheck:isuid($uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
// Removing template
$table_name = $this->db_tables_templates;
$condition = array ('template_uid'=>$uid,
'project_id'=>$project_id);
$this->dbm->RemoveData ($table_name,
$condition);«OK»;
}
// Removes pageRemoveDraft ($project_uid,
$page_uid, $draft_uid, $fromdisk = FALSE)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||
! valcheck:isuid ($page_uid) ||! valcheck:isuid
($draft_uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$page_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $page_uid, 'project_id', $project_id);
$draft_id = $this->getIdByUidCond
($this->db_tables_page_drafts, 'draft_uid', $draft_uid, 'page_id',
$page_id);($fromdisk)
{
// Getting draft published bool
$what = array('published');
$from = array ($this->db_tables_page_drafts);
$condition = array ('id'=>$draft_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$published = $row[0];($published)
{
// Getting page url
$what = array ('page_url');
$from = array ($this->db_tables_pages);
$condition = array ('id'=>$page_id);
$row = $this->dbm->GetData ($what, $from,
$condition);
$url = $row[0];
// Removing page
$gen = new Generator();
$gen->RemovePage($url);
}
}
// Removing draft
$table_name = $this->db_tables_page_drafts;
$condition = array ('id'=>$draft_id);
$this->dbm->RemoveData ($table_name,
$condition);«OK»;
}
// Gets id by uidfunction getIdByUid
($table_name, $uid_name, $uid_value)
{
// Getting template id from uid
$what = array('id');
$from = array ($table_name);
$condition = array ($uid_name=>$uid_value);
$row = $this->dbm->GetData ($what, $from,
$condition);(int)$row[0];
}
// Gets id by uid with equality conditionfunction
getIdByUidCond ($table_name, $uid_name, $uid_value,
$cond_name, $cond_value)
{
// Getting template id from uid
$what = array('id');
$from = array ($table_name);
$condition = array ($uid_name=>$uid_value,
$cond_name=>$cond_value);
$row = $this->dbm->GetData ($what, $from,
$condition);(int)$row[0];
}
// Returns template dataGetTemplate
($project_uid, $template_uid, $draft_uid)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||
! valcheck:isuid ($template_uid) ||!
valcheck:isuid ($draft_uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$template_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $template_uid, 'project_id',
$project_id);
$what = array ('object_data');
$from = array
($this->db_tables_template_drafts);
$condition = array ('draft_uid'=>$draft_uid,
'template_id'=>$template_id);
$row = $this->dbm->GetData ($what, $from,
$condition);$row[0];
}
// Returns page dataGetPageDraft ($project_uid,
$page_uid, $draft_uid)
{
// Checking if input is correct(! valcheck:isuid
($project_uid) ||
! valcheck:isuid ($page_uid) ||! valcheck:isuid
($draft_uid))
{«Bad input»;
}
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$page_id = $this->getIdByUidCond ($this->db_tables_pages,
'page_uid', $page_uid, 'project_id', $project_id);
$what = array ('object_data');
$from = array ($this->db_tables_page_drafts);
$condition = array ('draft_uid'=>$draft_uid,
'page_id'=>$page_id);
$row = $this->dbm->GetData ($what, $from,
$condition);$row[0];
}
// Returns all pages infoMccGetPages
($project_uid)
{
// Checking if input is correct(! valcheck:isuid
($project_uid))
{«Bad input»;
}
global
$config_delim_normal;$config_delim_sub;$config_delim_subsub;
$res = «»;
// Getting all pages
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$what = array ('id', 'page_uid', 'page_url');
$from = array ($this->db_tables_pages);
$condition = array
('project_id'=>$project_id);
$rows = $this->dbm->GetAllData ($what,
$from, $condition);
//page_uid; page_url; draft1, pub; draft2,
pub|page_uid; page_url; draft1, pub
$c = count($rows) - 1;($rows as $row)
{
$res.= $row[1].$config_delim_sub.$row[2];
// Getting all drafts
$page_id = $row[0];
$what = array ('draft_uid', 'published');
$from = array ($this->db_tables_page_drafts);
$condition = array ('page_id'=>$page_id);
$rowsd = $this->dbm->GetAllData ($what,
$from, $condition);($rowsd as $rowd)
{
$res.=
$config_delim_sub.$rowd[0].$config_delim_subsub.$rowd[1];
}($c!= 0)
{
$res.= $config_delim_normal;
}
$c -= 1;
}$res;
}
// Returns all templates infoMccGetTemplates
($project_uid)
{
// Checking if input is correct(! valcheck:isuid
($project_uid))
{«Bad input»;
}
$config_delim_normal;$config_delim_sub;$config_delim_subsub;
$res = «»;
// Getting all templates
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
$what = array ('id', 'template_uid');
$from = array ($this->db_tables_templates);
$condition = array
('project_id'=>$project_id);
$rows = $this->dbm->GetAllData ($what,
$from, $condition);
//template_uid|template_uid|template_uid
$c = count($rows) - 1;($rows as $row)
{
$res.= $row[1];($c!= 0)
{
$res.= $config_delim_normal;
}
$c -= 1;
}$res;
}
// Returns status of projectMccGetStatus
($project_uid)
{$config_delim_normal;$config_delim_sub;$config_delim_subsub;
$res = «»;
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid
($this->db_tables_projects, 'project_uid', $project_uid);
// Getting templates count
$from = array ($this->db_tables_templates);
$condition = array
('project_id'=>$project_id);
$count = $this->dbm->GetCount ($from,
$condition);
$res.= $count.$config_delim_normal;
// Getting pages count
$from = array ($this->db_tables_pages);
$condition = array
('project_id'=>$project_id);
$count = $this->dbm->GetCount ($from,
$condition);
$res.= $count.$config_delim_normal;
// Getting resources count
$from = array ($this->db_tables_resources);
$condition = array
('project_id'=>$project_id);
$count = $this->dbm->GetCount ($from,
$condition);
$res.= $count;
$res;
}
// Returns resources infoGetResources
($project_uid,
$usedin_type = FALSE,
$usedin_uid = FALSE)
{
// Checking if input is correct(! valcheck:isuid
($project_uid))
{«Bad input 1»;
}
//TODO: make better check on type, and
standartize it(($usedin_type &&! valcheck:isuid ($usedin_type)) ||
($usedin_uid &&! valcheck:isuid
($usedin_uid)))
{«Bad input 2»;
}
$config_delim_normal;$config_delim_sub;$config_delim_subsub;
$res = «»;
// Getting all resources
$this->dbm->SelectDatabase
($this->db_name);
$project_id = $this->getIdByUid ($this->db_tables_projects,
'project_uid', $project_uid);
// If resource from page or
template($usedin_type)
{($usedin_type == «p»)
{
$usedin_id = $this->getIdByUidCond
($this->db_tables_pages, 'page_uid', $usedin_uid, 'project_id',
$project_id);
}
{
$usedin_id = $this->getIdByUidCond
($this->db_tables_templates, 'template_uid', $usedin_uid, 'project_id',
$project_id);
}
// Getting id's of associated resources
$what = array ('resource_id');
$from = array
($this->db_tables_resource_usedin);
$condition = array
('usedin_type'=>$usedin_type,
'usedin_id'=>$usedin_id);
$rows = $this->dbm->GetAllData ($what,
$from, $condition);
$c = count($rows) - 1;($rows as $row)
{
$resource_id = $row[0];
$what = array ('resource_uid', 'path',
'data_type');
$from = array ($this->db_tables_resources);
$condition = array ('id'=>$resource_id);
$rowr = $this->dbm->GetData ($what, $from,
$condition);
$res.=
$rowr[0].$config_delim_sub.$rowr[1].$config_delim_sub.$rowr[2];($c!= 0)
{
$res.= $config_delim_normal;
}
$c -= 1;
}
}
// If global resource
{
// Getting data straight away
$what = array ('resource_uid', 'path',
'data_type');
$from = array ($this->db_tables_resources);
$condition = array ('project_id'=>$project_id,
'isglobal'=>TRUE);
$rows = $this->dbm->GetAllData ($what,
$from, $condition);
$c = count($rows) - 1;($rows as $row)
{
$res.=
$row[0].$config_delim_sub.$row[1].$config_delim_sub.$row[2];($c!= 0)
{
$res.= $config_delim_normal;
}
$c -= 1;
}
}
$res;
}
}
?>