Oficjalna strona internetowa sekcji młodzieżowej Unii Polityki Realnej w Krakowie (t)

Streszczenie

Projekt stanowi podstawę bazodanową dla projektu realizowanego z przedmiotu Technologie i Programowanie WWW. 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):
  1. 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.
  2. 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ń.
  3. Aktualności na pierwszej stronie – na głównej stronie portalu będzie znajdować się miejsce na umieszczanie przez redaktora istotnych wiadomości.
  4. 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.
  5. 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.
  6. 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.
  7. 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ć.
  8. 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.
  9. 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):
  1. 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
  2. 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.
  3. 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:

  1. 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
  2. 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

  1. Scenariusze dla gościa
    1. Rejestracja w serwisie
    2. Zapisanie się do newslettera
    3. 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
    4. Przeszukiwanie treści wiadomości
  2. Scenariusze dla zalogowanego użytkownika
    1. Dostęp do serwisu
      • zalogowanie do systemu
      • przypomnienie hasła użytkownika
    2. Dodawanie felietonów
    3. Aktualizacja profilu
      • zmiana adresu email
      • zmiana hasła
    4. 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
  3. Scenariusze dla redaktora
    1. 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
    2. Zatwierdzanie felietonów dodanych przez użytkowników
    3. Moderowanie komentarzy
    4. Tworzenie wiadomości do wysłania w newsletterze
  4. Scenariusze dla administratora
    1. Usuwanie użytkowników
    2. 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

  • 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

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

  • rejestracja użytkownika

  • logowanie

  • dodawanie komentarza

  • przypomnienie hasła

  • dodawanie tekstu

  • dodawanie multimediów

  • dodawanie książki

Zdefiniowanie panelu sterowania aplikacji

  • akceptacja tekstów użytkowników

  • edycja linków

  • edycja kont użytkowników

  • edycja wiadomości

  • zarządzanie użytkownikami

  • rozsyłanie newslettera

pl/dydaktyka/ztb/2010/projekty/upr_krakow/start.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0