====== Oficjalna strona internetowa sekcji młodzieżowej Unii Polityki Realnej w Krakowie (t) ======
[[krzysztof.klag@gmail.com|Krzysztof Klag]], [[jelen.rafal@gmail.com|Rafał Jeleń]], [[michalw@student.agh.edu.pl|Michał Wawrzynek]]
==== Streszczenie ====
Projekt stanowi podstawę bazodanową dla projektu realizowanego z przedmiotu Technologie i Programowanie WWW.
[[http://www.rafal.xtreemhost.com|Link do wersji roboczej serwisu]]
==== Sformułowanie zadania projektowego ====
Celem projektu jest wykonanie oficjalnej strony internetowej dla istniejącej partii politycznej. Nasz projekt to system CMS, który będzie umożliwiał łatwe i szybkie zarządzanie pojawiającymi się na stronie informacjami przez uprawnionego do tego redaktora. Oczywiście wszystkie informacje będą przechowywane w relacyjnej bazie danych. Nasz portal ma przede wszystkim realizować funkcję informacyjna dla osób zainteresowanych działalnością krakowskiego oddziału UPR. Celem portalu będzie przyciąganie ludzi, informowanie ich o istotnych wydarzeniach dotyczących partii, przedstawienie idei głoszonych przez UPR, stopniowe zdobywanie członków, sympatyków, a także elektoratu wyborczego. Strona internetowa ułatwiłaby na pewno organizowanie się sympatyków chcących uczestniczyć w różnych spotkaniach, prelekcjach, happeningach, itp. organizowanych przez oddział krakowski UPR.
==== Analiza stanu wyjściowego ====
Swoją stronę internetową posiada każda szanująca się partia polityczna. Istnieją też dziesiątki różnych stron oddziałów regionalnych czy młodzieżowych różnych partii. Oczywiście także Unia Polityki Realnej posiada swoją stronę główną, jak i kilka stron oddziałów regionalnych. Niestety zdarza się, że nie są one wykonane w sposób zbyt profesjonalny i wyglądają bardzo amatorsko. Czołowe polskie partie mogą przeznaczać ogromne środki na utrzymanie swoich stron przez co są one dość rozbudowane i wykonane w pełni profesjonalnie. Naszym celem jest stworzenie witryny na równie wysokim poziomie, zarówno merytorycznym jak i technicznym.
Partie polityczne tworzą swoje strony zarówno po to, aby przyciągać nowych sympatyków i wyborców, jak i na bieżąco informować o działaniach i wydarzeniach wewnątrz partii swoich członków i sympatyków. Strony tego typu mają przede wszystkim charakter informacyjny, internauci szukają na nich programów wyborczych, informacji władzach partii, podejmowanych działaniach, akcjach, itp.
==== Analiza wymagań użytkownika (wstępna) ====
Nasz projekt to system CMS, który będzie umożliwiał łatwe i szybkie zarządzanie pojawiającymi się na stronie informacjami przez uprawnionego do tego redaktora. Oczywiście wszystkie informacje będą przechowywane w relacyjnej bazie danych.
== Główne funkcjonalności (must): ==
- Portal działający w oparciu o napisanego przez nas CMS'a – nasze najważniejsze zadanie polega na napisaniu własnego systemu CMS, który umożliwi szybkie i łatwe zarządzanie informacjami pojawiającymi się na portalu.
- Newsletter – jest to niezbędny element tego typu stron, użytkownicy będą mogli wpisać się na listę mailingową dzięki której będą otrzymywać mailem informacje dotyczące ważnych wydarzeń i spotkań.
- Aktualności na pierwszej stronie – na głównej stronie portalu będzie znajdować się miejsce na umieszczanie przez redaktora istotnych wiadomości.
- Dział publicystka – w menu znajdzie się pozycja o nazwie publicystyka, gdzie prezentowane będą felietony użytkowników, będzie także formularz do dodawania własnych felietonów.
- Dział z polecanymi książkami – początkowo chcielibyśmy stworzyć w menu pozycję z listą książek, które konserwatywny-liberał przeczytać musi albo powinien. Konieczne będzie pogrupowanie książek w kategorie, powinny znaleźć się również krótkie opisy przy każdej pozycji.
- Dział media z zarejestrowanymi występami SM UPR w mediach – kolejna ważna pozycja to dział w którym internauci będą mogli obejrzeć lub wysłuchać występów członków SM UPR w mediach.
- Dział z informacjami o spotkaniach – najprawdopodobniej na głównej stronie serwisu, znajdzie się również sekcja z polecanymi spotkaniami, prelekcjami, happeningami i innymi wydarzeniami do których SM UPR będzie zachęcać.
- Działy z podstawowymi informacjami o partii – niezbędnik każdej strony partyjnej czyli główne informacje o partii: statut, program, władze, dokumenty itp.
- Dział z linkami do innych partii, organizacji, itp. - chcielibyśmy w estetyczny i uporządkowany sposób stworzyć bazę linków do współpracujących z UPR organizacjami (np. Koliber, Klub Austriackiej Szkoły Ekonomii) czy partiami. Znalazły by się tam również linki do blogów osób związanych UPR i do innych portali promujących idee wolnościowe.
== Funkcjonalności dodatkowe (should): ==
- System komentarzy i ocen pod felietonami użytkowników – z czasem będziemy chcieli rozbudować dział publicystyczny o np. możliwość oceniania czy dodawania komentarzy pod felietonami, niektórzy użytkownicy będą mogli tam zdobyć również swoją stałą pozycję w menu
- Forum – kolejny pomysł, który mógłby zostać wdrożony to forum na którym sympatycy mogliby dyskutować o sytuacji w partii, polityce, itp.
- Rozbudowa działu z polecanymi książkami – możliwość dodawani własnych pozycji przez użytkowników, pisani recenzji, oceniania, komentowania, itp.
== Wstępny projekt aplikacji ==
Serwis będzie projektowany w języku php z użyciem Zend Framework przy wykorzystaniu relacyjnej bazy danych MySQL. Przewidujemy następujące podzespoły:
- Kontroller
* Admin Kontroller – moduł administratora
* Index Kontroller – przeglądanie zawartości strony
* Profile Kontroller – wysyłanie propozycji aktualności, felietonów itp.
* Editor Kontroller – akceptacja nadesłanych przez użytkownika tekstów, dodawanie własnych
- Model
* Aktualności
* Publicystyka
* Książki
* Media
* Informacje na temat spotkań
* Informacje o partii
* Baza linków
== Role użytkowników ==
* admin – nieograniczone prawa, dodawanie, usuwanie, edycja tekstów
* redaktor – akceptacja tekstów nadsyłanych przez użytkowników, dodawanie tekstów
* zalogowany użytkownik - przeglądanie zawartości, propozycja tekstów
* gość – przeglądanie zawartości
==== Określenie scenariuszy użycia ====
- Scenariusze dla gościa
- Rejestracja w serwisie
- Zapisanie się do newslettera
- Przeglądanie treści serwisu
* przeglądanie głównych działów serwisu: aktualności, książki, publicystyka, linki, o partii
* możliwość oglądania multimediów
- Przeszukiwanie treści wiadomości
- Scenariusze dla zalogowanego użytkownika
- Dostęp do serwisu
* zalogowanie do systemu
* przypomnienie hasła użytkownika
- Dodawanie felietonów
- Aktualizacja profilu
* zmiana adresu email
* zmiana hasła
- Możliwość dodawania komentarzy
* dodawanie komentarzy do aktualności
* dodawanie komentarzy do felietonów
* dodawanie komentarzy w dziale multimediów
* dodawanie komentarzy w dziale książek
- Scenariusze dla redaktora
- Dodawanie tekstów
* dodawanie własnych felietonów
* dodawanie aktualności na pierwszej stronie
* dodawanie informacji o spotkaniach
* dodawanie opisów książek
* dodawanie multimediów
- Zatwierdzanie felietonów dodanych przez użytkowników
- Moderowanie komentarzy
- Tworzenie wiadomości do wysłania w newsletterze
- Scenariusze dla administratora
- Usuwanie użytkowników
- Zarządzanie informacjami na stronie
* edycja wiadomości i wpisów we wszystkich działach
* usuwanie wiadomości i wpisów we wszystkich działach
* dodawanie tekstów we wszystkich działach
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:use_case.png|}}
==== Identyfikacja funkcji ====
* logowanie i wylogowanie z serwisu
* modyfikacja i usuwanie kont użytkowników
* dodanie, modyfikacja i usuwanie aktualności na pierwszej stronie
* dodanie, modyfikacja i usuwanie multimediów
* dodanie, modyfikacja i usuwanie informacji o spotkaniach
* dodanie, modyfikacja i usuwanie opisów książek
* dodanie, modyfikacja i usuwanie linków oraz informacji o partii
* dodanie, modyfikacja i usuwanie komentarzy pod wpisami
* zapisywanie się i wysyłanie newslettera
* dodawanie własnych felietonów przez użytkowników
==== Analiza hierarchii funkcji projektowanej aplikacji ====
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:fhd.png|}}
==== Budowa i analiza diagramu przepływu danych ====
=== DIAGRAM KONTEKSTOWY ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dfd_kontekstowe.png|}}
=== DIAGRAM GŁÓWNY ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dfd_glowny.png|}}
=== OBSŁUGA GOŚCIA ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dfd_obsluga_goscia.png|}}
=== OBSŁUGA UŻYTKOWNIKA ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dfd_obsluga_uzytkownika.png|}}
=== OBSŁUGA REDKATORA ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dfd_obsluga_redaktora.png|}}
=== OBSŁUGA ADMINISTARTORA ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dfd_obsluga_administratora.png|}}
==== Wybór encji (obiektów) i ich atrybutów ====
**AKTUALNOSCI**
* id_aktualnosci INT not null (PK)
* naglowek VARCHAR not null
* zawartosc TEXT not null
* data_publikacji DATE not null
* godzina_publikacji TIME not null
* autor INT not null (FK)
**INFORMACJE**
* id_informacji INT not null (PK)
* typ VARCHAR
* autor INT not null (FK)
* zawartosc TEXT not null
* data_modyfikacji DATE
* godzina_modyfikacji TIME
**KATEGORIE**
* id_kategorii INT not null (PK)
* nazwa VARCHAR not null
* opis TEXT
**KOMENTARZE**
* id_komentarza INT not null (PK)
* autor INT not null (FK)
* zawartosc TEXT
* data DATE
* godzina TIME
* id_obiektu INT not null (FK)
* typ VARCHAR not null
**KSIAZKI**
* id_ksiazki INT not null (PK)
* nazwa VARCHAR not null
* opis TEXT
* autor INT (FK)
* kategoria INT (FK)
**LINKI**
* id_linku INT not null (PK)
* autor INT not null (FK)
* nazwa VARCHAR not null
* opis TEXT
* link VARCHAR not null
* logo VARCHAR not null
* data_dodania DATETIME not null
**MEDIA**
* id INT not null (PK)
* link TEXT not null
* nazwa VARCHAR
* autor INT (FK)
* data_dodania DATETIME not null
**NEWSLETTER**
* id INT not null (PK)
* tytul VARCHAR not null
* tresc TEXT not null
* zawartosc TEXT not null
* data_wyslania DATE not null
* godzina_wyslania TIME not null
* autor INT not null (FK)
**SPOTKANIA**
* id_spotkania INT not null (PK)
* nazwa VARCHAR not null
* opis TEXT
* data_dodania DATETIME
* autor INT (FK)
**TEKSTY**
* id_tekstu INT not null (PK)
* naglowek VARCHAR not null
* tresc TEXT not null
* autor INT not null (FK)
* zaakceptowano TINYINT not null
* data_dodania DATETIME not null
**UZYTKOWNICY**
* id_uzytkownika INT not null (PK)
* login VARCHAR not null
* haslo VARCHAR not null
* email VARCHAR not null
* imie VARCHAR
* nazwisko VARCHAR
* rola VARCHAR not null
* newsletter TINYINT not null
==== Projektowanie powiązań (relacji) pomiędzy encjami ====
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:diagram_relacji.png|}}
==== Projekt diagramów STD (State Transition Diagram – diagramy przejść pomiędzy stanami) ====
=== Diagram stanów dla użytkownika zalogowanego i gościa ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:std_user_gosc.png|}}
=== Diagram stanów dla redaktora i administratora ===
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:std_redaktor_admin.png|}}
==== Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów w oparciu o zdefiniowany diagram ERD ====
CREATE TABLE IF NOT EXISTS aktualnosci (
id_aktualnosci int(11) NOT NULL AUTO_INCREMENT,
naglowek varchar(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
zawartosc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
data_publikacji date NOT NULL,
godzina_publikacji time NOT NULL,
autor int(11) NOT NULL,
zdjecie mediumblob,
PRIMARY KEY (id_aktualnosci),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=66 ;
CREATE TABLE IF NOT EXISTS informacje (
id_informacji int(11) NOT NULL AUTO_INCREMENT,
typ varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
autor int(11) NOT NULL,
zawartosc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
data_modyfikacji date DEFAULT NULL,
godzina_modyfikacji time DEFAULT NULL,
PRIMARY KEY (id_informacji),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
CREATE TABLE IF NOT EXISTS kategorie (
id_kategorii int(11) NOT NULL AUTO_INCREMENT,
nazwa varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
opis text CHARACTER SET utf8 COLLATE utf8_polish_ci,
autor varchar(100) DEFAULT NULL,
PRIMARY KEY (id_kategorii)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
CREATE TABLE IF NOT EXISTS komentarze (
id_komentarza int(11) NOT NULL AUTO_INCREMENT,
autor int(11) NOT NULL,
zawartosc text CHARACTER SET utf8 COLLATE utf8_polish_ci,
data date DEFAULT NULL,
godzina time DEFAULT NULL,
id_obiektu int(11) NOT NULL,
typ varchar(50) NOT NULL,
PRIMARY KEY (id_komentarza),
KEY autor (autor),
KEY id_obiektu (id_obiektu)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;
CREATE TABLE IF NOT EXISTS komentarz_obiekt (
id_komentarza int(11) NOT NULL,
id_obiektu int(11) NOT NULL,
typ varchar(20) NOT NULL,
PRIMARY KEY (id_komentarza,id_obiektu),
KEY id_obiektu (id_obiektu),
KEY typ (typ)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS ksiazki (
id_ksiazki int(11) NOT NULL AUTO_INCREMENT,
nazwa varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
opis text CHARACTER SET utf8 COLLATE utf8_polish_ci,
autor int(11) DEFAULT NULL,
kategoria int(11) DEFAULT NULL,
PRIMARY KEY (id_ksiazki),
KEY autor (autor),
KEY kategoria (kategoria)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;
CREATE TABLE IF NOT EXISTS linki (
id_linku int(11) NOT NULL AUTO_INCREMENT,
autor int(11) NOT NULL,
nazwa varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
opis text CHARACTER SET utf8 COLLATE utf8_polish_ci,
link varchar(100) NOT NULL,
logo varchar(100) NOT NULL,
data_dodania datetime NOT NULL,
PRIMARY KEY (id_linku),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
CREATE TABLE IF NOT EXISTS media (
id int(11) NOT NULL AUTO_INCREMENT,
link text NOT NULL,
nazwa varchar(100) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
autor int(11) DEFAULT NULL,
data_dodania datetime NOT NULL,
PRIMARY KEY (id),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS newsletter (
id int(11) NOT NULL AUTO_INCREMENT,
tytul varchar(120) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
tresc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
data_wyslania datetime NOT NULL,
autor int(11) NOT NULL,
PRIMARY KEY (id),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
CREATE TABLE IF NOT EXISTS organizacje (
id_organizacji int(11) NOT NULL AUTO_INCREMENT,
dodal varchar(50) NOT NULL,
nazwa varchar(50) NOT NULL,
opis text,
link varchar(100) NOT NULL,
logo varchar(100) NOT NULL,
data_dodania datetime NOT NULL,
PRIMARY KEY (id_organizacji)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
CREATE TABLE IF NOT EXISTS spotkania (
id_spotkania int(11) NOT NULL AUTO_INCREMENT,
nazwa varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
opis text CHARACTER SET utf8 COLLATE utf8_polish_ci,
data_dodania datetime DEFAULT NULL,
autor int(11) DEFAULT NULL,
PRIMARY KEY (id_spotkania),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS teksty (
id_tekstu int(11) NOT NULL AUTO_INCREMENT,
naglowek varchar(120) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
tresc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
autor int(11) NOT NULL,
zaakceptowano tinyint(4) NOT NULL DEFAULT '0',
data_dodania datetime NOT NULL,
PRIMARY KEY (id_tekstu),
KEY autor (autor)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
CREATE TABLE IF NOT EXISTS uzytkownicy (
id_uzytkownika int(11) NOT NULL AUTO_INCREMENT,
login varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
haslo varchar(40) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
email varchar(40) NOT NULL,
imie varchar(40) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
nazwisko varchar(40) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
rola varchar(20) NOT NULL DEFAULT 'user',
newsletter tinyint(4) NOT NULL DEFAULT '0',
data_rejestracji datetime DEFAULT NULL,
PRIMARY KEY (id_uzytkownika)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
==== Analiza zależności funkcyjnych i normalizacja tabel ====
W każdej tabeli atrybuty są w pełni bezpośrednio zależne od klucza głównego, dane przechowywane w bazie są z punktu widzenia implemntacji projektu istotnie atomiczne, więc wydaje nam się, że baza danych spełnia założenia 3NF.
==== Projektowanie operacji na danych ====
SELECT * FROM komentarze JOIN uzytkownicy ON (komentarze.autor = uzytkownicy.id_uzytkownika) WHERE id_obiektu = $id AND typ = 'aktualnosc' ORDER BY data DESC, godzina DESC;
SELECT * FROM newsletter LEFT JOIN uzytkownicy ON (newsletter.autor = uzytkownicy.id_uzytkownika) WHERE id = $id;
SELECT id_uzytkownika, login, email FROM uzytkownicy ORDER BY data_rejestracji;
UPDATE teksty ('naglowek', 'tresc', 'autor') VALUES ($naglowek, $tresc, $autor) WHERE id_tekstu = $id;
==== Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych ====
* rejestracja użytkownika
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:rejestracja.jpg|}}
* logowanie
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:logowanie.jpg|}}
* dodawanie komentarza
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dodawanie_komentarza.jpg|}}
* przypomnienie hasła
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:przypomnienie_hasla.jpg|}}
* dodawanie tekstu
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dodanie_wiadmosci.jpg|}}
* dodawanie multimediów
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dodanie_multimediow.jpg|}}
* dodawanie książki
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:dodawanie_ksiazki.jpg|}}
==== Zdefiniowanie panelu sterowania aplikacji ====
* akceptacja tekstów użytkowników
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:akceptacja_tekstow.jpg|}}
* edycja linków
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:edycja_linku.jpg|}}
* edycja kont użytkowników
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:edycja_uzytkownikow.jpg|}}
* edycja wiadomości
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:edycja_wiadomosci.jpg|}}
* zarządzanie użytkownikami
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:uzytkownicy.jpg|}}
* rozsyłanie newslettera
{{:pl:dydaktyka:ztb:2010:projekty:upr_krakow:wysylanie_newslettera.jpg|}}