Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 9.

Slides:



Advertisements
Podobne prezentacje
C++ w Objectivity Marcin Michalak s1744. Pomocne pakiety: Data Definition Language (DDL). Standard Template Library (STL). Active Schema.
Advertisements

Mirosław Ochodek Sponsorzy: JFace Jak jeszcze szybciej tworzyć interfejsy? ECESIS Eclipse Community Education Project An.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11.
PROPOZYCJE ZAPISU Autorzy: Uczniowie należący do Samorządu Szkolnego.
W ramach akcji Szkoła z klasą Celem tego projektu było sprawdzenie ile uczniów naszej szkoły wywodzi się z Kresów Wschodnich i na ile ważne jest.
Czyli jak zrobić prezentację komputerową?
Zastosowanie Internetu
Dzień Jak będzie ładna pogoda, to zbiórka jest pod tunelem z rowerami o 9:40 Jeżeli pogoda nie dopisze, to zbiórka jest pod moim domofonem.
Wycieczka w Pieniny Fotograficzna opowieść o tym, jak zespolone siły klas I a, II h, III a i III b zdobyły 9 VI 2006 r. Trzy Korony. Prezentację przygotowała.
Portal Systemu Jakości Kształcenia Jak się zalogować? Instrukcja dla pracowników UMCS Przygotowanie: Urszula Wojtczak, Zespół Obsługi Systemu Jakości Kształcenia.
AUTOR :WOJTEK NOWIK REPORTER : PATRYK SORMAN LUK SMIS PIOTREK COLO (KOLO) MAX SOWT.
Elektronika cyfrowa Prezentacja Remka Kondrackiego.
AUTOR :WOJTEK NOWIK REPORTER : LUK SMIS PATRYK SORMAN PIOTREK COLO (KOLO)
Zastanówmy Się…...
Po co nam samorz ą d ? XVIII Sesja Sejmu Dzieci i MłodzieżySZKO Ł A DEMOKRACJI.
Człowiek jest wielki nie przez to, co ma nie przez to kim jest, lecz przez to czym dzieli się z innymi Jan Paweł II Człowiek jest wielki nie przez to,
Pomoc słabszym w nauce Sprzątanie pobliskiego terenu Pomoc starszym.
Przeglądanie inOrder function BSTinorder(BSTNode root) if root NOT NULL BSTinorder(root.left) Print(root) BSTinorder(root.right) 2, 4, 6, 8, 9, 10, 12,
Prezentacja z przedmiotu „systemy wizyjne”
Podstawy programowania
Cechy dobrej i udanej strony www Net etykieta. Ergonomia stron WWW.
fotografie - Marcel Cohen
Program wspomagający sekretariat Korespondencja. Wprowadzenie Instytucja dla którego ma być aplikacja pracuje w sieci Ethernet. Serwery pracują na systemie.
Co każdy użytkownik komputera wiedzieć powinien
Nieformalne miejsca spotkań. ANKIETY Przeprowadziliśmy wśród uczniów gimnazjum ankietę na temat nieformalnych miejsc spotkań. Przedstawimy przykładowe.
ALGORYTMY.
W jaki sposób uczniowie ZSE mogą działać na rzecz ekorozwoju lokalnego?
Antonie de Saint-Exupery
System gospodarki rynkowej
xHTML jako rozszerzenie HTML
Instalacja serwera WWW na komputerze lokalnym
PHP Operacje na datach Damian Urbańczyk. Operacje na datach? Dzięki odpowiednim funkcjom PHP, możemy dokonywać operacji na datach. Funkcje date() i time()
HTML Podstawy języka hipertekstowego Damian Urbańczyk.
Tworzenie tabel w edytorze Word
Migacze. PROBLEM Ożywiamy parę identycznych organizmów. Na zmianę wysyłają coraz dłuższe sekwencje impulsów (A zaczyna jednym mignięciem, B mruga dwa.
Dominik Jedliński oraz Bartek Kurczab
Jak się uchronić przed zagrożeniami wynikającymi z użytkowania sieci?
Ewolucja lewicowych grup intersu (SLD i przyjaciele) w Polsce po 1989 roku! - kliknij tu -kliknij tu.
J AK ZACZĄĆ PRACĘ Z ?. przed rejestracją Upewnij się, że posiadasz: aktywne konto zainstalowaną przeglądarkę Internet Explorer indywidualny studencki.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
Warsztaty C# Część 3 Grzegorz Piotrowski Grupa.NET PO
BEZPIECZNY INTERNET. PRZEGLĄDANIE STRON INTERNETOWYCH.
Kliknij Tylko jedna minutka. M ó wi si ę, ż e by kogo ś d ostrzec wystarczy 1 sekunda 1 godzina by kogo ś oceni ć 1 dzie ń by kogo ś polubi ć lub pokocha.
Lokalne konta użytkowników i grup
Pliki elementowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików elementowych. Pliki takie zawierają informację zakodowaną
MINECRAFT TWÓJ ŚWIAT.
Wiktoria i Beata ZDROWIE. ,,Małe co nie co Idę do sklepiku naszego, Myślę, wybiorę sobie coś dobrego, Tu coca-cola na mnie zerka, Tu miałbym ochotkę na.
Są w życiu chwile, kiedy tak bardzo odczuwamy brak obecności innych,
Szymon Murawski, 4 rok nanotechnologii1 Misja kosmiczna GAIA Czyli cały wszechświat w twoim domu.
Instrukcja logowania do Platformy E-Learningowej WSFiZ Instrukcja dla studentów.
W.K. (c) Bazy danych Access. 2W.K. (c) 2007 Baza danych - definicje Baza danych to zbiór informacji dotyczących określonego tematu (stanowiących.
Temat 5: Elementy meta.
Temat 1: Umieszczanie skryptów w dokumencie
Temat 6: Elementy podstawowe
Fizyka ruchu drogowego
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 4.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
PROCEDURA LOGOWANIA SIĘ DO PANELU Ogólnopolski Program Partnerski dla Nauczycieli TWÓRCZY NAUCZYCIEL – TWÓRCZA EDUKACJA 1. Kliknij na wybraną zakładkę
Śniadanie daje moc Śniadanie daje moc przygotowane przez uczniów klasy 1b wspólnie z wychowawcą p. Bożeną Szczepanik.
PRZYCHODZI BABA DO LEKARZA.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Instrukcje sterujące: W instrukcjach sterujących podejmowane są decyzje o wykonaniu tych czy innych instrukcji programu. Decyzje te podejmowane są w zależności.
GABRIEL GARCÍA MÁRQUEZ
Komtech Sp. z o.o. Magic Janusz ROŻEJ.
Magic Janusz ROŻEJ Komtech Sp. z o.o.
w/g Grzegorz Gadomskiego
Klasa 1b Prezentacja przedstawiająca uczniów klasy 1b Gimnazjum w Międzyborowie. Autor: Dawid Roszczyk.
KW2 Czy można żyć bez KW2? - Można, ale co to za życie?... [S.Toton 2001r.n.e.]
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 10.
Zapis prezentacji:

Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 9

Lista książek Teraz coś bardziej skomplikowanego – pełna lista książek. Na liście będziemy mogli zaznaczać ksiązki do dalszych akcji Lista książek będzie zawierać nie tylko tytuły – ale także status książki Na status składają się różne dane Status powinien podawać maksymalną informację o książce

Lista książek… Książka jest potrzebna I ją posiadamy – znacznik OK. I jej nie posiadamy Liczba oferowanych książek Lub informacja od kogo ją kupujemy Ksiązka nie jest potrzebna a ją posiadamy Informacja o możliwości sprzedania Informacja o ofercie Informacja o tym, że ktoś ją zarezerwował

Cel – lista książek

Lista książek - kod $neededBooks = $dbase->getBooksNeededByUser($user); $booksHaving = $dbase->getOwnBooks ($user); $offers = $dbase->countOffers(); $sellingBooks= $dbase->getTransactionsOfSeller ($user); $buyingBooks = $dbase->getTransactionsOfBuyer ($user); $selection = new SelectedItems("selectedbooks"); $allBooks= null; switch($filter) { case 0: $allBooks = new RecordsetMerge(&$booksHaving, &$neededBooks, 0, 3); break; case 1: $allBooks = new RecordsetSubtract(&$neededBooks, &$booksHaving, 0, 3); break; case 2: $allBooks = new RecordsetSubtract(&$booksHaving, &$neededBooks, 0, 3); break; }

Lista książek - kod $booksWithOffers = new RecordsetJoin( &$allBooks, &$offers, 0,0,3,1); $books = new RecordsetTransformation( &$booksWithOffers, "0|3| |6|9"); $booksWithN = new RecordsetJoin( &$books, &$buyingBooks, 0,0,1,1); $booksWithNS = new RecordsetJoin( &$booksWithN, &$sellingBooks, 0,0,1,1); $data = new FormatCheckbox( &$booksWithNS, "0", "selectedbooks", $selection); $withSelector = new CreateStateInfo( &$data, "1|0| |2"); $grid = new GridBuilder( "Tytuł:LB3|Wybierz:CN3:60|Uwagi:CN1:160 |Opis:LN1:250"); $grid->renderGrid(&$output, &$withSelector);

Brakujące klasy Na poprzednim wykładzie prezentowane były klasy SelectedItems – kolekcja elementów które zostały wybrane FormatCheckbox – formatowanie komórki gridu w postaci pola pozwalającego na zaznaczanie Brakuje jeszcze: CreateStateInfo – klasa formatująca status w zależności od informacji z bazy

Status Formatowanie statusu jest bardzo nietypową operacją Jest silnie zależny od postaci danych Nie ma sensu silić się na uniwersalność Dane dotyczące statusu są rozrzucone po polach wejściowego rekordsetu Pola wejściowe mogą nie istnieć bo łączenie rekordsetów dodaje pola tylko gdy rekordy pasują.

Status… Klasa formtująca status będzie użyta tyko w jednym kontekście Nie musi być uniwersalna! class CreateStateInfo extends RecordsetOperation { function RecordsetOperation(&$source, $definition) { $this->CreateBookInfo(&$source, $definition); }

Status … Status składa się z Ikony wskazującej na status ksiązki Dodatkowego tekstu który zawiera uzupełniające informacje Skorzystamy z pól: Czy ksiązka jest nam potrzebna Czy książkę oferujemy Kto kupuje / sprzedaje Ilość oferowanych książek

Status … function createField(&$sourceArray, &$schema) { $state = ""; $additionaLinfo = ""; $additionaLinfo = $sourceArray[$schema[3]]; if ($additionaLinfo == "") { $additionaLinfo = "brak ofert"; } else { switch($additionaLinfo % 10) { case 1: $additionaLinfo.= " oferta"; break;

Status … case 2: case 3: case 4: $additionaLinfo.= " oferty"; break; default: $additionaLinfo.= " ofert"; break; } if ($sourceArray[$schema[0]] == 0) { if ($sourceArray[$schema[2]] == "") { if ($sourceArray[$schema[3]] == "") $state = "need0"; else $state = "need"; }

Status … else { $state = "buying"; $additionaLinfo = "sprzedający: ". $sourceArray[$schema[2]]; } else { if ($sourceArray[$schema[1]] == "") { $state = "have"; $additionaLinfo = ""; } else if ($sourceArray[$schema[2]] == "") { $state = "offering"; }

Status … else { $state = "selling"; $additionaLinfo = "kupujący: ". $sourceArray[$schema[2]]; } return "<div style=\"background-image: url('graphics/". $state. ".gif'); background-repeat: no-repeat; background-position: center top; height: 32px; vertical-align: middle; padding-top: 20px;\" >". $additionaLinfo. " "; }

Wybór użytkownika Ustawienie użytkownika powinniśmy powiązać z logowaniem Informacja o tym czy, i kto jest zalogowany powinna być przechowywana w przeglądarce Nie powinna być jednak dostępna z poziomu strony lub formularza Najlepsze wydaje się COOKIE – dostępne z serwera

SecurityCheck class SecurityCheck { var $value; var $errorMessage; function SecurityCheck() { global $_FAKE; $this->value = $_FAKE["login"]; $this->errorMessage = $_FAKE["loginerr"]; if ($this->value=="" && $this->errorMessage=="") { $this->value = $_COOKIE["login"]; $this->errorMessage = $_COOKIE["loginerr"]; }

SecurityCheck… function render(&$output) { $output->out("<input type=\"hidden\" name=\"lout\" value=\"\">"); if ($this->value != 0) { $dataAccess = new DataAccess(); $user = $dataAccess->getUserInfo( $this->value); if (!$user->eof()) { $user = $user->get(); // wyświetl informacje o użytkowniku }

Sprawdzenie użytkownika Na każdej stronie aplikacji powinniśmy sprawdzać czy użytkownik jest zalogowany W naszej aplikacji jest tylko jedna strona, można więc sprawdzić użytkownika przed wyborem – który panel powinien być wyświetlony A jeśli nie jest zalogowany – panelem aplikacji jest panel logowania.

Sprawdzenie użytkownika… $user = new SecurityCheck(); $panel = null; if ($user->getUser() == 0) { $panel = new LoginPanel(); if ($user->errorMessage == 1) { $panel->setError(); } else { // Tu – wybór panelu do wyświetlenia

Panel logowania Panel logowania składa się z kontrolek w których użytkownik na wpisać login oraz hasło Jeśli panel logowania jest wyświetlany mimo wysłania tych informacji – to znaczy że hasło lub użytkownik są błędne!

LoginPanel class LoginPanel { var $errorMessage; function LoginPanel() { $this->errorMessage = ""; } function setError() { $this->errorMessage = "Nieprawidłowe dane. Sprawdź czy identyfikator uzytkownika i haslo są prawidłowe i spróbuj jeszcze raz."; }

LoginPanel … function render(&$output) { $login = new ControlEdit("logn", ""); $passw = new ControlPassword("pass", ""); $output->out("<div style=\"text-align: center; width: 100%; height: 400px\"><div style=\"height: 150px; text-align: center; color: red; padding: ; font-weight: bold; \"> $this->errorMessage "); $output->out("<span style=\"width: 100px; text-align: left\"> Użytkownik: ");

LoginPanel $login->render(&$output); $output->out(" <span style=\"width: 100px; text-align: left\"> Hasło: "); $passw->render(&$output); $output->out(" <input style=\"width: 200px; margin: ; background-color: #6a5131; color: white; font-weight: bold; background-repeat: no-repeat; background-image=url( 'graphics/login.gif')\" type=submit name=subm1 value=\"wejdź\">"); $output->out(" "); }

Wybór grup

GroupSelectionPanel class GroupSelectionPanel { var $dbase; var $user; function GroupSelectionPanel( &$dbase, $user) { $this->dbase = &$dbase; $this->user = $user; }

GroupSelectionPanel… function render(&$output) { $separators = new SectionRenderer(); $separators->render(&$output, "Przypisania do grup"); $column = new ColumnSplitter(&$output, "33%|33%|34%"); $lastColumn = 0; $categorie = $this->dbase->getGrupCategories(); $columns->renderBegin(); while(!$categories->eof()) { $category = $categories->get(); $id = $category[0]; $name = $category[1]; $column = $category[2]; if ($lastColumn != $column) { $columns->renderSplit(); $lastColumn = $column; } $separators->render(&$output, $name); $this->renderCategory(&$output, $id); } $columns->renderEnd(); }

GroupSelectionPanel… function renderCategory(&$output, $id) { $allGrups = $this->dbase->getGrupsOfCategory($id); $grupsOfUser = $this->dbase->getGrupsOfUser( $this->user); $allData = new RecordsetJoin(&$allGrups, &$grupsOfUser, 0, 0, 1, 1); $withID = new AddHiddenIdentity(&$allData, "grup", 0, 1); $withCheck = new FormatCheckbox(&$withID, "0", "belongToGrup", "2", true, ""); $ready = new RecordsetTransformation( &$withCheck, "0|1"); $grid = new GridBuilder("Należę:CB3:100| Nazwa grupy:LB3"); $grid->renderGrid(&$output, &$ready); }

Dane muszą być odbierane Panel z wyborem grup – tylko przygotowuje interfejs Potrzebny jest reaktor – który przesłane dane zapisze do bazy danych Przyda się także zestaw przycisków do zapisu oraz do odwołania zapisu (cancel)

Przyciski class SaveAndCancel { function render(&$output) { $output->out("<span style=\"float: right; text-align: center; width: 30px; height: 19px; overflow: hidden; padding-top: 2; background-image: url('". $GRAPHPATH. "save.gif')\"> <a style=\"text-decoration: none;\ href=\"javascript: document.f1.submit();\"> "); $output->out("<span style=\"float: right; text-align: center; width: 30px; height: 19px; overflow: hidden; padding-top: 2; background-image: url('". $GRAPHPATH. "cancel.gif')\"> <a style=\"text-decoration: none;\" href=\"javascript: document.location = document.location;\"> "); }

W następnym odcinku Reakcja na zmianę przynależności do grup Edycja a właściwie – edycje książek Posiadanych – by można je było usunąć Lub zaoferować gdy niepotrzebne Lub odwołać/zatwierdzić zakup Lub zaznaczyć, że są już kupione poza systemem Lub zaznaczyć, że są sprzedane poza systemem.