1. Процесор - 300
Мгц 2. Оперативна пам’ять - 32 Мб 3. Відеокарта та монітор - 640x480, 256
кольорів при частоті розгортки 75 Гц (TCO’95) 4. Клавіатура - довільна 5.
Миша - довільна 6. Вільний дисковий простір - 120 Мб (для встановлення
серверів Apache та MySQL).
|
Наведена конфігурація не перевищує рівень оснащення
комп’ютерів користувачів на даний момент часу, тому програма буде доступною
широкому колу користувачів.
Конфігурація комп’ютера, на якому виконувалась розробка:
1. Процесор
|
Intel Pentium 4 2,6
GHz
|
2. Оперативна
пам’ять
|
512 Mb
|
3. Відеокарта
|
SVGA 128Mб
|
4. Монітор
|
SVGA
|
5. Жорсткий диск
|
120 Gb
|
6. Принтер
|
Samsung ML-1250
|
5. Інструкції системному адміністратору
5.1 Установка Apache 2.0 під Windows XP
Викачати ПО для установки Apache можна, наприклад, з його офіційного
сайту <#"588235.files/image001.gif">
Рис. 1. Автоматична установка серверу Apache
Щоб встановити HTTP-сервер Apache на свій комп'ютер, потрібно
натискувати на кнопку Next. До речі кажучи, ця ж програма дозволить змінити або
видалити вже встановлений web-сервер.
Після натиснення кнопки Next програма запропонує погодитися з умовами
ліцензії (рис. 2).
Рис. 2. Ліцензійна угода
Наступний екран міститиме інформацію про сервер Apache, і зокрема про
його Windows-реалізацію (його зображення не приводимо).
На наступному кроці потрібно ввести ім'я мережного домена, ім'я серверу
і e-mail адміністратора. Програма спробує автоматично визначити домен і хост по
настройках комп'ютера (рис. 3).
Рис. 3. Основна інформація про сервер
Після того, як було введено дані у вищенаведену форму, потрібно вибрати
тип установки: повна (встановлюються всі компоненти серверу) або визначувана
користувачем (можна вибрати компоненти для установки) (рис. 4). сайт інтерфейс apache дані
Рис. 4. Тип установки
Вибір компонентів серверу не дуже великий - це інструменти, необхідні
для роботи серверу і документація до нього (рис. 5).
Рис. 5. Вибір компонентів користувацької установки
Виберемо повну установку. Тоді на наступному кроці програма запропонує
вибрати папку, в яку буде встановлений сервер. За умовчанням сервер
встановлюється у папку C:\Program <../../Program> Files\Apache Group\
(рис. 6).
Рис. 6. Папка, в яку буде встановлений сервер
На наступному екрані (рис. 7) буде потрібно підтвердити правильність
введених даних і почати установку. З будь-якого вікна установки, включаючи і
це, можна повернутися назад і змінити введені раніше дані.
Рис. 7. Початок установки
Після натиснення кнопки Install почнеться безпосередня установка
серверу. Від користувача ніяких додаткових дій більше не потрібен. З одного
боку, це добре, але є у такої автоматизованої установки і деякі недоліки.
Наприклад, домашні директорії користувачів виявляються там же, де і файли
настройок серверу (С:\Program <../../Program>Files\Apache Group\Apache\users\).
Це небезпечно, якщо на комп'ютері працює декілька користувачів, що не є
адміністраторами серверу. Але спершу можна нічого не міняти. Припустимо, ми
запустили установник, ввели всі необхідні дані, він виконав всі операції
успішно і говорить, що сервер встановлений. Як перевірити, чи дійсно сервер
встановлений? Набираємо у вікні браузера <#"588235.files/image008.gif">
Рис. 8. Сторінка вітання
Отже, сервер встановлений. Файли, які повинні бути оброблені сервером,
можна зберігати або в корені серверу (в нашому випадку це С:\Program
<../../Program> Files\Apache Group\Apache\htdocs), або в директоріях
користувачів (в нашому випадку це С:\Program <../../Program> Files\Apache
Group\Apache\users\). Місцеположення кореня серверу і директорій користувачів
прописано в настройках серверу, а точніше, у файлі конфігурації httpd.conf
(знайти його можна в С:\Program <../../Program> Files\Apache Group\Apache\conf).
Для зміни цих шляхів потрібно змінити відповідні змінні у файлі конфігурації
серверу. Змінна у файлі конфігурації ServerRoot відповідає за кореневу
директорію серверу, а змінна UserDir - за директорію, де розташовуватимуться
файли користувачів серверу (для більш безпечної роботи радимо змінити змінну
UserDir на що-небудь типу c:\users\). Щоб отримати доступ до файлу test.html,
що знаходиться в корені серверу, потрібно набрати в браузере
<#"588235.files/image009.gif">
Рис. 9. Перезавантаження.
Подвійним кліком запускаємо його та натискаємо Restart.
Перевірка
Створюємо файл C:\www\tm\index.php, який має наступний
вміст: <?php phpinfo(); ?> та запускаємо в браузері адресу #"588235.files/image010.gif">
Рис. 10. Головна сторінка сайту
Верхня частина сайту представляє собою меню та пошук. Меню
дозволяє здійснювати перехід на головні сторінки сайту. Тобто, з будь-якої
сторінки сайту користувач може перейти на будь-яку іншу сторінку сайту.
В правому верхньому кутку розміщується форма для пошуку
інформації на сторінках сайту.
Для того, щоб знайти, наприклад, усі сторінки, на яких
міститься інформація про групи, треба ввести назву чи відповідні теми, які вас
цікавлять у пошукову форму і натиснути на кнопку «Шукати». Після цього
з’явиться список усіх знайдених груп. Також пошук працює по користувачам сайта
та проектам.
Для незареєстрованого користувача доступно декілька сторінок
для ознайомлення з сайтом.
Для того, щоб з’явилася можливість переглядати будь-які
сторінки на сайті, залишати повідомлення, завантажувати свої проекти потрібно
зареєструватися. Для цього натиснемо на посилання «Sign In», яке знаходиться у
головному меню сайту. Після наведення на ссилку «Sign In»
Під нею випливе дві наступні ссилки, це Login i Registration.
Рис. 11. Форма для входу
Рис. 12. Реєстраційна форма
Після виконання логіну чи реєстрації переходимо на сторінку
профайлу. На цій сторінці користувач
може завантажити власну фотокартку, заповнити поля власними даними, завантажити
або видалити свої проекти, видалити доданих друзів, змінити пароль, поштову
скриньку. Все це реалізовується за допомогою Аякс запитів. Зліва можна побачити
меню швидкого переходу по сторінкам.
Рис. 13. Cторінка профайлу
Натиснувши на ссилку перейдемо на сторінку загального
перегляду усіх друзів. На цій сторінці користувач може видалити чи перейти на
сторінку профайлу свого друга. Також реалізован перехід по сторінкам, якщо
друзів більше 12(реалізовано Аякс запитом).
Рис. 14. Сторінка відображення друзів
Для того, щоб користувач міг запросити своїх товаришів
зареєструватися на сайті, була створена наступна сторінка.
Рис. 15. Запрошення друзів через пошту.
Якщо натиснути в лівому меню на ссилку Message - користувач
перейде на сторінку повідомлень, де користувач може отримувати та надсилати
повідомлення іншим користувачам сайту. Цю сторінку наведено нижче.
Рис. 16. Повідомлення користувача
Користувач може додавати свої проекти та креативні ідеї для
реклами свого таланту. Для того, щоб додати свій проект, потрібно перейти в
лівому меню по ссилці My Work. Після переходу, користувач побачить наступну
сторінку.
Рис. 17. Проекти користувача.
На цій сторінці користувач може виправляти інформацію про
свій проект, бачити скільки людей оцінили проект і коментарі, які залишили.
Користувач може видаляти коментарі. Перехід по проектам відбувається за
структурою степ корусіль. Для того, щоб завантажити новий проект, користувачу
необхідно перейти по ссилці, яка знаходиться в правому кутку - Add new project.
Рис. 18. Додавання нового проекту користувачем.
За такою ж самою схемою відбувається додавання креативних
ідей користувачем.
На сайті користувачі можуть створювати свої групи, де будуть
ділитися спільними ідеями, обмінюватися досвідом, проектами та знаннями.
Коли користувач хоче вступити в групу, то користувач
переходить по ссилці Groups, яка знаходиться у верхньому меню. Після переходу,
перед користувачем з'явиться наступна сторінка.
Рис. 19. Вивід усіх груп на сайті.
Якщо користувач зацікавився якоюсь конкретною групою, він
може переглянути її, натиснувши на ссилку View Group. Якщо користувач хоче
вступити в групу і вона не є приватною, то користувачу слідує натиснути на
силку Join Group. Якщо група є приватною, то користувач може надіслати запит на
вступ у групу, прикріпивши до нього повідомлення, якщо забажає.
Якщо користувач вступає до групи, він переходить на її
сторінку, яку ми бачимо нижче.
Рис. 20. Вигляд групи із середини(адміністратор).
Якщо натиснути влкадку Our Projects побачимо наступну
сторінку:
Рис. 21. Довільні 4 проекти людей, що знаходяться в групі.
Як ми бачимо, в групі існують медіа файли. На даний момент -
це картинки. Користувач може додавати їх до групи, перейшовши по ссилці
Add/Edit Media.
Рис. 22. Додавання картинок до групи.
Рис. 23. Відображення медіа файлу.
Перегляд картинок відбувається за принципом степ каруселі.
Тобто відповідно до нажатої стрілочки с такої сторони виїжджає картинка разом з
описом та коментарями користувачів.
Також користувач може запросити своїх друзів приєднатися до
групи на сайті, перейшовши по ссилці Invite people to this group.
Рис. 24. Запрошення друзів на вступ до групи
Не маловажною частиною групи є форум, де учасники групи
можуть спілкуватися один з одним. На форумі користувачі можуть створювати теми
на обговорювати їх. Створити тему користувач може заходячись на головній
сторінці групи та натиснувши на посилання Start New Topic.
Рис. 25. Створення нової теми на форумі.
Користувач може давати відповіді на тему натиснувши на кнопку
Post Your Reply.
Рис. 26. Давання відповіді на тему форума.
Якщо користувач зробив помилку в своїй відповіді, він може
виправити її, натиснувши Edit Post,або видалити її зовсім, натиснувши Delete
Post.
Рис. 27. Правка відповіді на форумі.
Адміністратор групи може виправляти чи оновляти дані групи з
легкістю та найменшою затратою часу. Для цього лише треба натиснути голубого
кольору ссилку Edit … Та вписати туди нове значення. Все робиться без
перезавантаження сторінки, за допомогою Аякс запитів.
Рис. 28. Адміністрування сторінки групи.
Адміністратор сайту має всі права на видалення груп, всіх
складових груп, користувачів, коментарів, проектів. Для цього потрібно лише
зайти на сайт під адміністратором і для нього з’являються ссилки на видалення.
Як можемо бачити на верхніх скріншотах. Адміністратор додається вручну. І’мя
прописується у файлу db\db_connect.php.
7. Керівництво програмісту
7.1 База даних
Таблиця soc_comments
(містить інформацію про коментарі проектів та ідей
користувачів)
Поле
|
Опис
|
id
|
ID-номер коментаря
|
comments_id
|
ID-номер (якщо
проект - work_id, ідея - creative_id)
|
author
|
Нік користувача
|
time
|
Дата
|
comment
|
Зміст коментаря
|
Таблиця soc_creatives
(містить інформацію про креатині ідеї користувачів)
Поле
|
Опис
|
id
|
ID-номер ідеї
|
author_id
|
ID-номер автора
|
author
|
Нік автора
|
picture
|
Розміщення картинки
на сервері
|
title
|
Назва
|
about
|
Тема
|
date
|
Дата додання на
сайт
|
tags
|
Теги
|
estimate
|
Оцінка ідеї
|
views
|
Кількість оглядів
|
Таблиця soc_disc
(містить інформацію про форум групи сайта)
Поле
|
Опис
|
id
|
ID-номер теми чи
повідомлення
|
parent
|
Тема - 0,
повідомлення - ідентифікатор теми
|
title
|
Назва
|
post
|
Зміст
|
time
|
Час додання
|
group_id
|
ID-номер групи
|
user_id
|
ID-номер
користувача
|
Таблиця soc_groups
(містить інформацію про групи сайта)
Поле
|
Опис
|
id
|
ID-номер групи
|
title
|
Назва групи
|
url
|
Місце банера групи
на сервері
|
description
|
Опис групи
|
contact_info
|
Контактна
інформація адміністратора
|
type
|
Тип групи(Приватна
чи загальна)
|
admin
|
Нік адміністратора
групи
|
fields
|
Інтереси, які
обговорюються в групі
|
time
|
Час створення групи
|
size
|
Розмір групи
|
web_title
|
Назва сайту групи
|
web_url
|
Ссилка на
розміщення сайту
|
Таблиця soc_media_comments
(містить інформацію про коментарі фотокарток в групах сайта)
Поле
|
Опис
|
id
|
ID-номер коментаря
|
username
|
Нік користувача
|
group_id
|
ID-номер групи
|
image_id
|
ID-номер картинки
|
comment
|
Коментар
|
time
|
Час
|
Таблиця soc_messages
(містить інформацію про повідомлення користувачів)
Поле
|
Опис
|
id
|
ID-номер
повідомлення
|
from
|
Від кого
|
to
|
Кому
|
subject
|
Тема
|
text
|
Зміст
|
date
|
Дата відправки
|
Таблиця soc_upload_files
(містить інформацію про загружені файли в групах сайта)
Поле
|
Опис
|
id
|
ID-номер файлу
|
author_id
|
ID-номер автора
|
title
|
Назва
|
description
|
Опис
|
url
|
Розміщення файлу на
сервері
|
group_id
|
ID-номер групи
|
time
|
Час завантаження
|
Таблиця soc_users
(містить інформацію про користувачів веб-сайта)
Поле
|
Опис
|
id
|
ID-номер
користувача
|
name
|
Ім’я користувача
|
surname
|
Призвіще
користувача
|
occupation
|
Професія
користувача
|
company
|
Компанія, де працює
|
username
|
Нік на сайті
|
password
|
Пароль
|
email
|
Поштова скринька в
інтернеті
|
skills
|
Навички користувача
|
status
|
Статус користувача
|
friends
|
Друзі користувача
|
url
|
Домашній сайт
користувача
|
member_since
|
Дата регістрації
користувача
|
picture_url
|
Ссилка фотокартки
на сервері
|
location
|
Де знаходиться
користувач
|
countviews
|
Кількість
переглядів профайлу
|
appreciations
|
Кількість подяк
користувачу
|
last_viewed
|
Дата останнього
перегляду
|
last_appreciated
|
Дата останньої
подяки
|
Таблиця soc_users_groups
(містить інформацію про користувачів і про групи в яких вони
знаходяться)
Поле
|
Тип
|
id
|
ID-номер запису
|
user
|
ID-номер
користувача
|
group
|
admin
|
ID-номер
адміністратора групи
|
Таблиця soc_works
(містить інформацію про проекти користувачів веб-сайту)
Поле
|
Опис
|
id
|
ID-номер проекту
|
author_id
|
ID-номер
користувача
|
author
|
Ім’я користувача
|
title
|
Назва
|
url
|
Ссилка, на картинку
|
tags
|
Теги
|
estimate
|
Оцінки
|
views
|
Кількість проглядів
|
date
|
Дата додання
|
last_viewed
|
Дата-останній
прогляд
|
last_appreciated
|
Дата-останнє
одобрення
|
client
|
Для кого виконана
робота
|
discipline
|
Область роботи
|
site
|
Домашній сайт
|
comment
|
Коментарій від
користувача
|
7.2
Структура бази даних
7.3 Структура веб-сайту
· class - папка містить класи та
функції класів веб-сайта.
· css - тут розміщуються файли стилів
веб-сайта;
· db - папка містить клас підключення
до бази даних;
· images - містить усі файли (графічні
та html-документи), які необхідні для формування дизайну сайту;
· includes - містить файли, які
підключаються до головної сторінки в ході роботи веб-сайта;
· tmp - зберігає тимчасові файли.
· uploads - містить файли, які були
завантажені користувачами..php - головний файл сайту.
7.4 Передача даних між сторінками
Для передачі даних між сторінками у дипломному проекті
використано 5 способів:
. Використання сесій.
. Використання кукісів.
. Передача даних за допомогою GET-методу.
. Передача даних за допомогою POST-методу.
. Використання спільної бази даних.
7.5 Файл, який встановлює взаємодію з базою даних
Скрипт, який встановлює з’єднання з базою даних.
<?php
$db_link=mysql_connect('localhost','root','123456') or die('Could
not connect to mysql server.');_select_db('art_put',$db_link) or die('Could not
select database.');
$_cfgSuperModers = "qwe"; // Here you can add
people in the moderator's list. Example:
"qwe,super_mod1,super_mod2,super_mod3"( $_COOKIE['username'] ){
$tmp =
explode(",",$_cfgSuperModers);sm_trim(&$value, $key){
$value = trim( $value );
}_walk($tmp, 'sm_trim');
$isSuperModerator = in_array($_COOKIE['username'],$tmp);
}
?>
У програмному коді використано такі функції бібліотеки MySql:
. mysql_connect - встановлює з'єднання з сервером баз
даних MySQL. Функція приймає три параметри: перший - адреса сервера, другий -
логін користувача MySQL і третій - пароль користувача MySQL.
. mysql_select_db - вибирає базу даних MySQL.
. mysql_affected_rows - повертає кількість рядків, що
були використані попередньою операцією MySQL.
. mysql_num_rows - повертає кількість рядків, які є чи
були вібрані з таблиці.
. mysql_insert_id - повертає останній ідентифікатор
який було внесено в таблицю.
. mysql_db_query - виконує запит MySQL
. mysql_fetch_array - отримати результат виконання
запиту як асоціативний масив.
. mysql_query - відправляє SQL-запит до серверу MySQL.
. mysql_close - закриває MySQL- з’єднання.
7.6 Опис классу, який відповідає за розділ «Groups»
Найбільший класс на сайті. Інші шматки php - коду вставлені
на сторінках сайту, де вони використовуються.
<?Groups{getGroups( $pageno = '', $items = '' ){ //
функція приймає на вхід 2 параметри номер сторінки і
кількість груп на 1 сторінці.
$sql = "SELECT * FROM `soc_groups` WHERE 1";//
будуємо запит де, вибираемо с бази данних усі групи
користувачів( $pageno ) //
якщо змінна існує, то додаємо до запиту LIMIT
$sql .= " LIMIT ". ($pageno - 1) * $items.
",$items";
$grp = mysql_query ( $sql ); //
виконуємо запит($fgroup = mysql_fetch_array( $grp ) ) //
прокручуємо в циклі стількі разів, скільки у нас повернулося
різних даних
$tmp[] = $fgroup; //
записуємо данні в змінну$tmp; // повертаємо змінну
}JoinGroup(){ //
функція яка відповідає за вступ до групи
$error = ''; //
обнуляємо змінну
$user = @mysql_fetch_array( mysql_query("SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'") ); //
вибираємо людину с таблиці
$userIn = @mysql_fetch_array( mysql_query("SELECT * FROM
`soc_users_groups` WHERE `user`='{$user['id']}' AND
`group`='{$_GET['groupname']}'") ); //
перевіряємо чи вона вже існує в группі( is_array( $userIn )
){ //
якщо існує записуємо текст в змінну.
$error = 'alert';
}else{ //
в іншому випадку робимо запит на вставку нової строки у
таблицю_query ( "INSERT INTO `soc_users_groups` (`user`,`group`,`admin`)
VALUES ('{$user['id']}', '{$_GET['groupname']}', 0)");_query ("UPDATE
`soc_groups` SET `size`=`size`+1 WHERE `id`={$_GET['groupname']}") or
die(mysql_error()); //
обновлюємо розмір группи
}$error; //
повертаємо змінну
}LeaveGroup(){ //
функція відповідає за вихід з группи
$user = mysql_fetch_array( mysql_query("SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'") ); //
вибираємо людину з таблиці_query("DELETE FROM
`soc_users_groups` WHERE `user`='{$user['id']}' AND
`group`='{$_GET['groupname']}'"); //
видаляємо її з таблиці, яка показує, хто існує в
группі._query ("UPDATE `soc_groups` SET `size`=(`size`-1) WHERE
`id`={$_GET['groupname']}"); //
оновлюємо розмір таблиці.
}MyGroups( $pageno = '', $items = '' ){ //
функція яка показує в яких группах користувач є.
$user = @mysql_fetch_array( mysql_query("SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'") ); //
вибираємо користувача с таблиці
$sql = "SELECT `group` FROM `soc_users_groups` WHERE
`user`='{$user['id']}'"; //
будуємо запит( $pageno ) //
якщо змінна не пуста
$sql .= " LIMIT ". ($pageno - 1) * $items.
",$items"; // додаємо до запиту ліміт.
$res = mysql_query ( $sql ); //
обробляємо запит.( $row = mysql_fetch_array( $res ) )
$groups[] = @mysql_fetch_array( mysql_query( "SELECT *
FROM `soc_groups` WHERE `id`='{$row['group']}'" ) );//
вибираємо с таблиці, яка показує в яких групах вже перебуває
користувач та записуємо дані у змінну, яку и повертаємо нижче.$groups;
}UsersInfo(pageno = '', $items = ''){ //
за допомогою функції дізнаємося інформацію про користувачів
які існують в группі для виводу на екран.
$sql = "SELECT `soc_users`.* FROM
`soc_users`,`soc_users_groups` WHERE `soc_users`.`id`=`soc_users_groups`.`user`
AND `soc_users_groups`.`group` = '{$_REQUEST['groupname']}'"; //
будуємо запит, де вибираємо усі данні про користувача с
таблиці де ідентифікатор відповідає полю user і ідентифікатор групи дорівнює
змінній, яку ми отримаємо.( $pageno )
$sql .= " LIMIT ". ($pageno - 1) * $items.
",$items";
$res_users = mysql_query( $sql ); //
виконуємо запит( $row = @mysql_fetch_assoc( $res_users ) )
$users[] = $row; //
отримані данні записуємо у змінну$users; //
повертаємо змінну.
}SizeProject(){ //
функція допомагає дізнатись загальну кількість проектів у
групі.
$sql = "SELECT `soc_works`.* FROM
`soc_works`,`soc_users_groups` WHERE
`soc_works`.`author_id`=`soc_users_groups`.`user` AND
`soc_users_groups`.`group` = '{$_GET['groupname']}'";
$res_users = mysql_query( $sql ); //
будуємо запит, де вибираємо проекти користувачів які існують
в групі.
$count = @mysql_num_rows($res_users); //
підраховуємо комірки$count; //
повертаємо кількість
}ShowProject( $pageno = '', $items = '' ){ //
вибір усіх проектів користувачів які існують у групі.
$sql = "SELECT `soc_works`.* FROM
`soc_works`,`soc_users_groups` WHERE
`soc_works`.`author_id`=`soc_users_groups`.`user` AND
`soc_users_groups`.`group` = '{$_GET['groupname']}'"; //
будуємо запит де вибираємо проекти за умови виконання усіх
умов які вказані в запиті.( $pageno )
$sql .= " LIMIT ". ($pageno - 1) * $items.
",$items"; // додаємо ліміт, якщо змінна передається.
$res_users = mysql_query( $sql );( $row = @mysql_fetch_assoc(
$res_users ) )
$projects[] = $row; //
отримані дані записуємо у зміну$projects; //
повертаємо дані
}Randomize( $projects ){ //
функція яка вибирає 4 проекта із загальної кількості в
повертає в довільному порядку.
$num = 4; //
записуємо кількість проектів які треба відображати в довільному
порядку( count( $projects ) > $num){ //
якщо загальна кількість проектів більша за 4 то робимо цикл(
$i = 0; $i < $num ; $i++){
$randr = rand( 0,count( $projects )-1 ); //
генеруємо довільне число від 0 до загальної кількості
проектів.($q = 0; $q<count($save_randr); $q++ )( $randr == $save_randr[ $q ]
){ //
якщо змінна ринд прирівнюється до змінної сєйврєнд, то
$randr = rand( 0,count( $projects )-1 ); // генеруємо ще раз
довільне число.
$q = -1; //
змінна дорівнює -1.
}
$save_randr[] = $randr;
$random[] = $projects[$randr]; //
записуємо 4 довільні проекти в змінну.
}
}else{$projects;
}$random;
}getAllMedia( $pageno = '', $items = '' ){ //
вибираємо усі картинки які користувачі завантажили до групи.
$sql = "SELECT * FROM `soc_upload_files` WHERE
`group_id`='{$_REQUEST['groupname']}' ORDER BY time DESC"; //
будуємо запит, де вибираємо картинки відповідної групи и
розташовуємо їх у порядку завантаження починаючи з найостаннішої.( $pageno )
$sql .= " LIMIT ". ($pageno - 1) * $items.
",$items";
$res = mysql_query( $sql );( $row = @mysql_fetch_array( $res
) )
$getMedia[] = $row;$getMedia;
}getIDAllMedia ( $id ){
функція дозволяє отримати усі ідентифікатори завантажених
картинок в відновідну групу.
$sql = "SELECT * FROM `soc_upload_files` WHERE
`group_id`='{$_GET['groupname']}' ORDER BY time DESC"; //
будуємо відповідний запит.
$res = mysql_query( $sql );
$i = 1;( $row = @mysql_fetch_array( $res ) ){( $row['id'] ==
$id )$i;
$i++;
}
}SizeMedia(){ //
функція за допомогою якої дізнаємось кількість картинок
завантажених у групу.
$row = mysql_query("SELECT * FROM `soc_upload_files`
WHERE `group_id`='{$_GET['groupname']}'");mysql_num_rows( $row );
}getUserMedia(){ //
дізнаємось які картинки належать до даного користувача.
$res = @mysql_fetch_array( mysql_query("SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'") ); //
вибираємо користувача.
$row = mysql_query("SELECT * FROM `soc_upload_files`
WHERE `group_id`='{$_GET['groupname']}' AND `author_id`='{$res['id']}'"); //
вибираємо картинки с таблиці данного користувача.( $row_images =
@mysql_fetch_array($row) )
$userImages[] = $row_images;$userImages; //
повертаємо картинки.
}ExistUser( $option, $gid = '' ){ //
функція яка перевіряє чи користувач вже існує в группі чи ще
ні і виводить на екран відновідні ссилки: вступити чи покинути групу,
зовнішньої чи внутрішньої сторінки групи. Якщо група приватна, то за допомогою
мови JavaScript визначаємо центр екрану та виводимо повідомлення, що група
приватна і потрібен дозвіл адміністратора групи. Користувач може написати
повідомлення до адміністратора групи. Якщо людина не виконала логін до сайту а
натиснула ссилку увійти до группи, перенаправляємо її на сторінку логіна.
$gid = $gid|$_GET['groupname'];
$res = @mysql_fetch_array( mysql_query ( "SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'" ) ); //
вибираємо користувача с таблиці.
$row = @mysql_fetch_array( mysql_query ( "SELECT * FROM
`soc_users_groups` WHERE `user`='{$res['id']}' AND `group`='$gid'" ) ); //
перевіряємо чи користувач існує в группі.
$group = @mysql_fetch_array( mysql_query ( "SELECT *
FROM `soc_groups` WHERE `id`='$gid'" ) ); //
вибираємо данну группу з таблиці груп.
$admin_group = @mysql_fetch_array( mysql_query ( "SELECT
`admin` FROM `soc_groups` WHERE `id`='$gid' AND
`admin`='{$_COOKIE['username']}'" ) ); // перевіряємо чи користувач є
адміністратором групи.( $_COOKIE['username'] ){( $group['type'] == '1' or
!$group['type'] ){( is_array( $row ) ){( $admin_group['admin'] AND $option ==
'inner' )"<a
href=\"index.php?page=insidegroup&groupname=$gid&delete_group=true\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Delete
Group</a>";($admin_group['admin'] AND $option == 'outer')"<a
href=\"index.php?page=insidegroup&groupname=$gid&delete_group=true\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Delete
Group</a>";( $option == 'inner' )"<a href=\"index.php?page=insidegroup&groupname=$gid&exit=true\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Leave
Group</a>";"<a
href=\"index.php?page=mygroup&groupname=$gid&exit=true\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Leave
Group</a>";
}else{( $option == 'outer' )"<a
href=\"index.php?page=mygroup&groupname=$gid&join=true\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Join
Group</a>";"<a
href=\"index.php?page=insidegroup&groupname=$gid&join=true\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Join
Group</a>";
}
}else{( is_array( $row ) ){( $admin_group['admin'] AND
$option == 'inner' )"<a
href=\"index.php?page=insidegroup&groupname=$gid&delete_group=true\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Delete
Group</a>";($admin_group['admin'] AND $option == 'outer')"<a
href=\"index.php?page=insidegroup&groupname=$gid&delete_group=true\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Delete
Group</a>";( $option == 'inner' )"<a
href=\"index.php?page=insidegroup&groupname=$gid&exit=true\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Leave
Group</a>";"<a href=\"index.php?page=mygroup&groupname=$gid&exit=true\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Leave
Group</a>";
}else{( $option == 'outer' )"<a
href=\"#\"=\"_top = $(document).scrollTop();_height =
$(window).height();_height = window_height/2 - 75;_height += from_top;
$('#alert_join_private_group').css('top',element_height+'px');_width
= $(window).width()/2 - 165;
$('#alert_join_private_group').css('left',element_width+'px');
$('#alert_join_private_group').show();
$('#event_admin_id').val('{$group['admin']}');
$('#event_user_id').val('{$_COOKIE['username']}');
$('#event_group_id').val('$gid');false;\"=\"color:#626667;font-size:11px;padding-left:6px;\">Join
Group</a>";"<a href=\"#\"=\"_top =
$(document).scrollTop();_height = $(window).height();_height = window_height/2
- 75;_height += from_top;
$('#alert_join_private_group').css('top',element_height+'px');_width
= $(window).width()/2 - 165;
$('#alert_join_private_group').css('left',element_width+'px');
$('#alert_join_private_group').show();
$('#event_admin_id').val('{$group['admin']}');
$('#event_user_id').val('{$_COOKIE['username']}');
$('#event_group_id').val('$gid');false;\"=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Join
Group</a>";
}
}
}else{( is_array( $row ) ){( $option == 'inner' )"<a
href=\"index.php?page=login\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Leave
Group</a>";"<a href=\"index.php?page=login\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Leave
Group</a>";
}else{( $option == 'outer' )"<a
href=\"index.php?page=login\"
style=\"color:#626667;font-size:11px;padding-left:6px;\">Join
Group</a>";"<a href=\"index.php?page=login\"
style=\"color:#6D94FF;font-size:11px;font-weight:bold;font-family:Arial,sans-serif;cursor:pointer;\">Join
Group</a>";
}
}
}DeleteGroup(){ //
функція видалення групи. Видаляємо з усіх таблиць де
зустрічаються записи про таблиці, видаляємо іх, потім видаляємо усі картинки що
були загружені користувачами на сервер у цю групу._query("DELETE FROM
`soc_disc` WHERE `group_id`='{$_GET['groupname']}'");_query("DELETE
FROM `soc_media_comments` WHERE
`group_id`='{$_GET['groupname']}'");_query("DELETE FROM
`soc_users_groups` WHERE `group`='{$_GET['groupname']}'");
$res = mysql_query("SELECT * FROM `soc_upload_files`
WHERE `group_id`='{$_GET['groupname']}'");( $row = mysql_fetch_array( $res
) ){
$files[] = $row;('../'.$files['url']);
}_query("DELETE FROM `soc_upload_files` WHERE
`group_id`='{$_GET['groupname']}'") or die(mysql_error());
$res_main = mysql_query("SELECT * FROM `soc_groups`
WHERE `id`='{$_GET['groupname']}'") or die(mysql_error());( $row_main =
mysql_fetch_array( $res_main ) ){
$files_main[] = $row_main;
@unlink ($files_main['url']);
}_query("DELETE FROM `soc_groups` WHERE
`id`='{$_GET['groupname']}'") or
die(mysql_error());("Location:index.php?page=mygroup");
}LastUsersImg(){ //
за допомогою функції вибираємо останню завантажену картинку
користувача.
$user = @mysql_fetch_array( mysql_query( "SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'" ) );
$res = mysql_query( "SELECT * FROM `soc_upload_files`
WHERE author_id='{$user['id']}' ORDER BY `time` DESC LIMIT 1" );
$result = @mysql_fetch_array($res);$result;
}Comments(){ //
вибираємо усі коментарі для даної картинки.Якщо коментарів
немає, то повертаємо відповідний напис.
$res = mysql_query( "SELECT * FROM `soc_media_comments`
WHERE `group_id`='{$_GET['groupname']}' AND `image_id`='{$_GET['imgId']}'"
);($row = @mysql_fetch_array($res))
$allComm[] = $row;(is_array($allComm)){$allComm;
}else{"<div
style=\"text-align:center;padding-bottom:5px;\">There are no
comments yet...</div>";
}
}SendEmail(){ //
відпрака листа на поштову скриньку в Інтернеті, в якому
повідомляється що користувач був запрошений у групу.
$mail = explode (",", $_POST['invEmail']);
$subject = 'artput.jp/Invitation';
$message = 'You were invited to join the group on
artput.jp\nto view group
-http://artput.jp/index.php?page=grouppreview&groupname='.$_GET['groupname'](
$l = 0; $l < count($mail); $l++)($mail[$l], $subject, $message);
}SendInvitationMessage(){ //
повідомлення що приходить користувачу на сайті, що він був
запрошений до групи.
$groups = @mysql_fetch_array( mysql_query( "SELECT *
FROM `soc_groups` WHERE `id`='{$_GET['groupname']}'" ) );
$text = 'Hello, you was invited to join the group <a
style="color:#009CEC;"
href="http://artput.jp/index.php?page=grouppreview&groupname='.$_GET['groupname'].'">'.$groups['title'].'</a>
by '.$_COOKIE['username'].'.';
$text = addslashes($text);
$subject = 'Join group';
$to = explode (",", $_POST['invitedFriends']);($i =
0;$i < count($to); $i++)_query("INSERT INTO
`soc_messages`(`from`,`to`,`subject`,`text`,`date`)
VALUES('".$_COOKIE['username']."','".$to[$i]."','".$subject."','".$text."','".time()."');")
or die(mysql_error());
}GetAllUsers(){ //
обираємо усіх користувачів, які знаходяться у групі та всю
інформацію про них
$res = mysql_query("SELECT `user` FROM
`soc_users_groups` WHERE `group`='{$_GET['groupname']}'");( $row = @mysql_fetch_array($res))
$result = mysql_query("SELECT * FROM `soc_users` WHERE
`id`='{$row['user']}'"));
$allUserInfo[] = $result;$allUserInfo;
}CreateGroup(){ //
функція для створення групи._query("INSERT INTO
`soc_groups` (`title`,`url`,`description`,`contact_info`,`type`,`admin`,`fields`,`time`,`size`,`web_title`,`web_url`)
VALUES ('{$_POST['GroupName']}' , 'images/groups/default_banner.jpg' ,
'{$_POST['groupDescription']}' , '{$_POST['location']}' , '{$_POST['type']}' ,
'{$_COOKIE['username']}', '{$_POST['fields']}' , ". time() ." , '1' ,
'{$_POST['web_title']}', '{$_POST['web_url']}' );") or die(mysql_error());
$row = mysql_insert_id();
$res = @mysql_fetch_array(mysql_query("SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'"));_query("INSERT
INTO `soc_users_groups`(`user`,`group`,`admin`) VALUES('{$res['id']}', '$row',
'1')");$row;
}New_Topic(){ //
створення нової теми на форумі відповідної групи.
$res = @mysql_fetch_array(mysql_query("SELECT * FROM
`soc_users` WHERE `username`='{$_COOKIE['username']}'"));_query("INSERT
INTO `soc_disc` (`parent`,`title`,`post`,`time`,`group_id`,`user_id`)
VALUES(0,'{$_POST['new_topic2']}','{$_POST['first_post2']}',".time().",'{$_POST['post_group_id']}','{$res['id']}')")
or die(mysql_error());
}SendMessageTo(){ //
повідомлення для користувача що хтось відповів прокоментував
його тему._query("INSERT INTO
`soc_messages`(`from`,`to`,`subject`,`text`,`date`)
VALUES('".$_COOKIE['username']."','".$_POST['send_to']."','Answer
on topic: ".$_POST['topic_title']."','".$_POST['text_message']."','".time()."');")
or die(mysql_error());
}SearchGroups( $pageno = '', $items = '' ){ //
пошук груп
$sql = "SELECT * FROM `soc_groups` WHERE `title` LIKE
'%{$_POST['searchGroup']}%'";( $pageno )
$sql .= " LIMIT ". ($pageno - 1) * $items.
",$items";
$res = mysql_query($sql);( $row = mysql_fetch_array( $res ) )
$group[] = $row;$group;
}adminId(){
// дізнаємось ідентифікатор адміністратора групи.
$group_admin = @mysql_fetch_array( mysql_query("SELECT *
FROM `soc_groups` WHERE `admin`='{$_COOKIE['username']}' AND
`id`='{$_REQUEST['groupname']}'") );@mysql_fetch_array( mysql_query(
"SELECT * FROM `soc_users` WHERE username='{$group_admin['admin']}'" )
);
}
}
?>
7.7
Опис деяких фрагментів коду мови JavaScript
$('.required').blur(function (){ //
якщо необхідні поля пусті, то гранциці поля стають червоного
кольору.($(this).val() == '') //
якщо поле пусте
$(this).css("borderColor","red"); //
підсвічуємо його червоним кольором.
еlse //
якщо ні
$(this).css("borderColor","grey"); //
підсвічуємо звичайним сірим кольором.
});
$('img.createCircle').click(function (){ //
перевірка на те, щоб усі поля, які необхідні для створення
групи, були заповнені, якщо ні, підсвічуємо їх червоним кольором, та показуємо
повідомлення. Якщо заповнені - робимо формі сабміт.error = 0; //
оголошуємо змінну та присвоюємо їй значення 0.
$('.required').each(function (){ //
перевіряємо кожне поле з даним класом.($(this).val() == ''){ //
якщо поле пусте, то змінній error надається значення одиниці
і колір границь червоний.= 1;
$(this).css("borderColor","red"); //
якщо ні
}else
$(this).css("borderColor","grey"); //
підсвічуємо звичайним сірим кольором.
});(error != 0){ //
якщо змінна не дорівнює 0, то піднімається сторінка до верху
і показується дів з надписом, що потрібно заповнити всі поля.
$(document).scrollTop(0);
$('div.clay').show();
}else //
якщо ні
$('#createGroup').submit(); //
передаємо форму на сервер.
});dismissUser(){ //
за допомогою Аякс запиту відправляємо дані на сервер про
користувача якого адміністратор хоче видалити з групи. Потім без
перезавантаження сторінки оновлюємо дані про користувачів и показуємо
повідомлення по центру екрана, що користувач був видалений з групи.
$('.dismiss').click(function(){ //
коли натискаємо на елемент у якого даний клас, запускається
функція.
$.get('includes/ajax_admin.php',{ //
створюємо Аякс запит та передаємо змінні на сервер.:
'<?=$_GET['groupname'] ?>',_id : $(this).prev().val()
},(data){ //
коллбек функція отримує оброблені дані, та розміщає їх у
елемент з ідентифікатором content_users.
$('#content_users').html(data);
$('#alert_confirmation_text').html('User was deleted from
your group.'); //
виводимо інформацію, що видалення користувача з групи
відбулося. Далі іде розрахунок центра екрану користувача, щоб повідомлення
зявилося рівно по центру екрана._top = $(document).scrollTop();_height =
$(window).height();_height = window_height/2 - 50;_height += from_top;
$('#alert_confirmation').css('top',element_height+'px');_width
= $(window).width()/2 - 165;
$('#alert_confirmation').css('left',element_width+'px');
$('#alert_confirmation').show();();
}
);
});
}
// Підрозділ, де користувач може переглядати картинки групи.
Це так звана step carousel, що в перекладі означає пошагова
карусіль.
Користувач бачить перед собою 1 картинку по середені
відведеного місця.
Кляцаючи на стрілочку вліво чи вправо, відповідно змінюється
картинка і коментарі під нею, без перезавантаження сторінки. Все зроблено через
Аякс запити.cur_image = <?=$oGroups->getIDAllMedia( @$_REQUEST['imgId']
)?>;speed = 500;active_slider = false;queue = 0;
// Обявили змінні і присвоїли їм значення.lc_callback(){=
parseInt ($('.subclip').css('left')) / 400; //
Визначаємо значення left у елемента, ділимо його на 400, і
преобразовуємо у число.( sinum < 0 ) //
Якщо змінна менше 0, то робимо відповідні математичні
перетворення.= (sinum - sinum*2); +=1;
$('#ajax_content').load('includes/get_comments_by_ajax.php',{
//
Робимо Аякс запит і відсилаємо змінні на сервер._id : $(
'#slider_images_' + sinum ).attr('alt'),_id : '<?=$_GET['groupname']?>'
}
);
}
$('#right_arrow').click(function (){ //
Коли користувач натискає на праву стрілочку, запускається
функція.
$('#right_arrow').attr('src','images/groups/rightArrowUnactive.gif');
//
Малюнок активної стрілочки змінюється на неактивний.(
!active_slider ){ //
якщо змінна не активна, то робимо її активною._slider =
true;( parseInt( $('.subclip').css('width') ) ==
parseInt($('.subclip').css('left') ) + 400 ) //
якщо ширина елемента класу сабклип прирівнюється до
мінусового значення left+400 сабкліпу, то картинка здвигається на 200пікселів
вліво, і швидко біглою строкою картинка змінюється на найпершу.
$('.subclip').animate({left: '-=200px'}, speed).animate(
{left: '+='+( parseInt( $('.subclip').width() )-200)+'px'},
speed, function (){ count_img_right();rc_callback(); active_slider = false;
$('#right_arrow').attr('src','images/groups/rightArrowActive.gif'); });
еlse //
В іншому випадку на екран віїзжає картинка, яка була
попередньою з лівої сторони.
$('.subclip').animate({left: '-=400px'}, speed, function (){
count_img_right();rc_callback(); active_slider = false;
$('#right_arrow').attr('src','images/groups/rightArrowActive.gif'); });
}
});
При розробці даної роботи були виконані всі вимоги технічного
завдання. Було зпроектовано структуру бази даних та реалізовано скрипти на мові
програмування РНР для роботи з нею; було розроблено модуль для збереження,
редагування та перегляду сторінок сайту, реалізовано форум тощо.
Було реалізовано систему адміністрування веб-сайтом, яка
дозволяє додавати та редагувати контент веб-сайту за допомогою веб-браузера.
Модульна організація розробленої системи дозволяє у будь-який
момент часу доповнювати систему новими модулями.
При розробці даного порталу було використано мову
програмування РНР, JavaScript та сервер баз даних MySQL. Для розробки дизайну
сайту та обробки графічних зображень використовувалися такі графічні редактори
як Adobe Photoshop CS4 і Gimp.