====== 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|}}