Oficjalna strona internetowa sekcji młodzieżowej Unii Polityki Realnej w Krakowie (t)
Streszczenie
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
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
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
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
Budowa i analiza diagramu przepływu danych
DIAGRAM KONTEKSTOWY
DIAGRAM GŁÓWNY
OBSŁUGA GOŚCIA
OBSŁUGA UŻYTKOWNIKA
OBSŁUGA REDKATORA
OBSŁUGA ADMINISTARTORA
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
KATEGORIE
KOMENTARZE
KSIAZKI
LINKI
MEDIA
NEWSLETTER
SPOTKANIA
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
Projektowanie powiązań (relacji) pomiędzy encjami
Projekt diagramów STD (State Transition Diagram – diagramy przejść pomiędzy stanami)
Diagram stanów dla użytkownika zalogowanego i gościa
Diagram stanów dla redaktora i administratora
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
Zdefiniowanie panelu sterowania aplikacji