System zarządzania treścią.
Transkrypt
System zarządzania treścią.
Żewłakow Tomasz Woś Krzysztof Bazy Danych 2 Semestr 2011L System zarządzania treścią. 0. Etap 0: Słowny opis projektu. System zarządzania treścią. Aplikacja umożliwiająca łatwą aktualizację i edycję stron tekstowych serwisu za pomocą wizualnego edytora treści (umożliwia to wygodne tworzenie i formatowanie dokumentów bez znajomości HTMLa) oraz publikację tych treści w internecie. Zarządzanie treścią serwisu odbywa się poprzez wygodny panel dostępny z poziomu strony www, który jest dostępny wyłącznie dla użytkowników posiadających odpowiednie uprawnienia. Użytkownicy w systemie są podzieleni na role z uwagi na zakres prac. Administrator po zalogowaniu się do systemu, może każdemu zarejestrowanych użytkowników nadad odpowiedni stopieo uprawnieo. Aplikacja zostanie wykonana w technologii PHP z użyciem bazy danych PostgreSQL. Szkielet aplikacji będzie oparty o framework ZendFramework. 1. Etap 1: Projekt bazy danych. 1.1. Diagram ER. 1.2. Opis związków na diagramie ER. 1.3. Opis encji. 1.4. Analiza wymagań funkcjonalnych i niefunkcjonalnych. Wymagania funkcjonalne ID 1. Nazwa Autoryzacja użytkowników 2. Zarządzanie użytkownikami 3. Możliwośd publikowania, edycji i usuwania własnych treści 4. Wizualny edytor treści 5. Filtracja komentarzy 6. Logowanie akcji 7. Konfiguracja ustawieo Opis użytkownik może się zalogowad za pomocą indywidualnego loginu oraz hasła. Po zalogowaniu użytkownik w zależności od typu konta zyskuje odpowiednie uprawnienia do zarządzania treścią. możliwośd tworzenia użytkowników uprawionych do edycji zasobów serwisu – 3 poziomy uprawnieo użytkownik może dodawad własne komentarze, redaktor ponadto może dodawad własne posty, natomiast administrator ma możliwośd dodawania stron. możliwośd wizualnej edycji treści za pomocą edytora typu WYSIWYG. komentarze niezalogowanych użytkowników muszą zostad zatwierdzone przez administratora/redaktora przed opublikowaniem. wszystkie akcje wykonywane na stronie są logowane w bazie danych. system umożliwia zmianę konfiguracji w zależności od platformy na jakiej jest uruchomiony Priorytet 1 2 1 3 2 3 1 Wymagania niefunkcjonalne Bezpieczeostwo – system musi zapewnid bezpieczeostwo użytkowników – nikt nie może mied bezpośredniego dostępu do ich danych w bazie po za kierownikiem instytutu oraz administratorem. Niezawodnośd – system powinien byd dostępny ciągle oraz zapewniad spójnośd wprowadzanych danych. Wysoce niepożądane są pomyłki we wprowadzaniu tematu pracy. Przyjazny interfejs – aplikacja powinna byd łatwa w użytku, przejrzysta oraz estetycznie wyglądająca. Intuicyjnośd obsługi jest bardzo pożądana. System pomocy – system powinien byd wyposażony w komentarze przy każdym z pól wyboru. Możliwośd rozwoju systemu – powinna byd możliwośd dopisywania nowych modułów, oraz zmiany wyglądu. 1.5. Diagram logiczny. 1.6. Skrypt DDL. W osobnym pliku: baza.sql 2. Etap 2: Projekt aplikacji. 2.1. Hierarchia menu. Administracja o Kategorie Przeglądaj Edytuj Usuo Dodaj o Strony Przeglądaj Edytuj Usuo Dodaj o Posty Przeglądaj Edytuj Usuo Dodaj Przeglądaj komentarze Usuo Komentarz o Użytkownicy Przeglądaj Edytuj Usuo Dodaj Strona o Posty Przeglądaj Komentuj o Strony Przeglądaj 2.2. Szkielet aplikacji. Posty – moduł umożliwiający wyświetlanie, dodawanie, edycję oraz usuwanie postów wyświetlanych później na stronie głównej. Strony – moduł umożliwiający wyświetlanie, dodawanie, edycję oraz usuwanie stron informacyjnych. Użytkownicy – moduł obsługujący rejestrację, logowanie oraz zarządzanie kontem użytkowników oraz nadawanie im odpowiednich uprawnieo dostępu do panelu zarządzania treścią. Komentarze – moduł umożliwiający dodawanie komentarzy, wstępną moderację oraz umożliwiający usuwanie komentarzy. Logi – moduł umożliwiający przeglądanie w czytelnej formie logów z działao podczas użytkowania aplikacji. Opcje – moduł umożliwiający dostosowywanie opcji działania aplikacji do własnych preferencji. 2.3. Podział realizacji funkcjonalności między stronę serwera i klienta. Klient o o o o o Wyświetlanie postów, możliwośd ich edycji oraz usunięcia, Możliwośd komentowania postów oraz ich moderacji, Obsługa edycji, modyfikacji oraz dodawania postów, stron i użytkowników. Wstępna walidacja wprowadzanych danych, Wyświetlanie przyjaznego interfejsu. Serwer o Pobieranie, edycja oraz usuwanie rekordów w bazie danych – zarządzanie bazą danych, o Obsługa sesji użytkownika, o Pełna walidacja danych, o Obsługa żądao danych. o Logowanie zdarzeo i akcji. 2.4. Sposób realizacji wymuszania integralności danych. W tabelach zostały podefiniowane powiązania na bazie kluczy obcych. Dodając wartości do tabeli, w przypadku tabeli z kluczami obcymi, schemat bazy wymusza na nas dodawanie wartości jedynie zgodnych. Dodatkowo tabele połączone danym kluczem obcym są w tych samych momentach usuwane. Przykładowo, dodając post do kategorii musimy wybrad jedną z aktualnie zdefiniowanych. Natomiast jeśli usuwamy kategorię, również wszystkie wpisy z kategorii są usuwane. 2.5. Indeksy w bazie danych. Indeksy zostały nałożone w celu szybszego wyszukiwania informacji w tabelach. Znajdują się one na następujących polach: categories.id comment_status.id comments.id logs.id options.name pages.id posts.id priviliges.id publish_statuses.id users.id 2.6. GUI. 3. Etap 3: Implementacja. 3.1. Aplikacja. Dostępna pod adresem http://projekty.wos.in/bd/ 3.2. Procedury wbudowane i triggery. FUNKCJE Funkcja usuwająca komentarze zawierające dane słowo CREATE OR REPLACE FUNCTION delcommentwithword(slowo character) RETURNS boolean AS $BODY$ BEGIN --INSERT INTO user_connection_data (ip, user_id) VALUES (_ip, _user_id); DELETE FROM comments WHERE content LIKE '%'||slowo||'%'; IF FOUND THEN RETURN true; ELSE RETURN false; END IF; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; Funkcja zliczająca ilość postów i stron stworzonych przez użytkownika. CREATE OR REPLACE FUNCTION getcount() RETURNS numeric AS $BODY$ DECLARE counter NUMERIC(5,0); tmp NUMERIC(5,0); BEGIN SELECT COUNT(*) INTO counter FROM posts; SELECT COUNT(*) INTO tmp FROM pages; counter := counter + tmp; RETURN (counter) ; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; Funkcja zliczająca punkty użytkownika CREATE OR REPLACE FUNCTION getpoints(userid numeric) RETURNS numeric AS $BODY$ DECLARE points NUMERIC(5,0); tmp_points NUMERIC(5,0); BEGIN SELECT COUNT(*) INTO points FROM posts WHERE "author" = USERID; points := points * 3; SELECT COUNT(*) INTO tmp_points FROM pages WHERE "author" = USERID; tmp_points := tmp_points * 4; points := points + tmp_points; RETURN (points) ; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; Triggery Trigger ustawiający domyślną kategorię dla postów z usuwanej kategorii CREATE TRIGGER delete BEFORE DELETE ON categories FOR EACH ROW EXECUTE PROCEDURE bdelete(); REATE OR REPLACE FUNCTION bdelete() RETURNS trigger AS $BODY$ DECLARE idk NUMERIC(5,0); BEGIN SELECT id INTO idk FROM categories WHERE name = 'brak kategorii'; UPDATE posts SET category = idk WHERE category = OLD.id; RETURN NULL; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; Trigger pełniący rolę loggera. CREATE TRIGGER log AFTER INSERT OR UPDATE OR DELETE ON posts FOR EACH ROW EXECUTE PROCEDURE log_add(); CREATE OR REPLACE FUNCTION log_add() RETURNS trigger AS $BODY$ BEGIN IF (TG_OP = 'DELETE') THEN insert into log(ip, date, action, descr) values (new.author, now(), 'delete', old.title); RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN insert into log(ip, date, action, descr) values (new.author, now(), 'update', new.content); RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN insert into log(ip, date, action, descr) values (new.author, now(), 'insert', new.title); RETURN NEW; END IF; RETURN NULL; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; Trigger sprawdzający poprawność adresu mail użytkownika. CREATE TRIGGER vadilate_mailt BEFORE INSERT ON users FOR EACH ROW EXECUTE PROCEDURE vadilate_mail(); CREATE OR REPLACE FUNCTION vadilate_mail() RETURNS trigger AS $BODY$ BEGIN IF NEW.email NOT LIKE '%@%' THEN RAISE EXCEPTION '% bledny mail', NEW.email; END IF; RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;