Storybook

Sorakuilu

Harjoituksen osat

Tunti 1. Toimeksianto ja storybook-sovelluksen esitutkimus
Tunti 2. Suunnittele storybook
Tunti 3. Toteuta tietokanta
Tunti 4. Toteuta käyttöliittymä
Tunti 5. Laadi runko ja reititys järjestelmään
Tunti 6. Toteuta lukijan etusivu (tietojen haku lukijan näkymässä)
Tunti 7. Toteuta rekisteröityminen(tietojen lisäys lukijan näkymässä)
Tunti 8. Toteuta autentikointi (kirjaudu ja kirjaudu ulos)
Tunti 9. Toteuta ylläpidon etusivu (tietojen haku)
Tunti 10.Toteuta jutun lisäys ylläpitonäkymässä, tietojen tarkistus mukaan
Tunti 11.Toteuta jutun muokkaus ylläpitonäkymässä, tietojen tarkistus mukaan
Tunti 12.Toteuta jutun poistaminen ylläpitonäkymässä
Omat tehtävät: suunnittele ja toteuta admin-näkymän yhden jutun näyttäminen (linkki on jo olemassa), omien tietojen muokkaaminen sekä salasanan vaihtaminen (piirrä lisäksi kaaviot)


Tunti 9. Toteuta ylläpidon etusivu (tietojen haku)

Kun käyttäjä on kirjautunut, hänelle avautuu admin-sivu, jossa näkyvät hänen itsensä kirjoittamat jutut. Juttujen perässä ovat linkit muokkaukseen ja poistamiseen, jutun otsikosta avautuu juttu sellaisenaan (vrt, story lukijan näkymässä).

Autentikoiinin varmistamiseksi reitityksessä tarkistetaan, onmo käyttäjä kirjautunut.

Tämän tunnin tehtävät

toteutettavat osat

Kuvassa näkyvät tässä vaiheessa tarvittavat osat, jo toteutetut ovat harmaalla pohjalla.

Alla olevat sekvenssikaaviot kuvaavat periaatetta - tarkemmin kuvattaessa kannattaa käyttää metodien ja muuttujien nimiä:

sekvenssikaavio

Ja kun autentikointi on varmistettu:

sekvenssikaavio

./database/models/User.php, lisää metodi getId()

Metodi palauttaa kirjautuneen käyttäjän account_id:n (luodaan kirjautumisen yhteydessä).

<?php
    
public function getId()
    {
        return 
$this->id;
    }
?>

./database/models/Story.php, lisää metodi get_stories_by_id($id)

Metodi palauttaa käyttäjän kirjoittamat jutut.

<?php
    
public static function get_stories_by_id($id)
    {
        global 
$db;
        
        try 
        {
            
$statement $db->prepare("SELECT story_id,headline,article,published,hidedate FROM stories WHERE account_id = $id ORDER BY published desc;");
            
$statement->execute();
            return 
$statement->fetchAll(PDO::FETCH_CLASS);
        }
        catch (
PDOException $e)
        {
          
/* Exception (SQL error) */
          
echo $e->getMessage();
          return 
FALSE;
        }    
     }
?>

Reititys

Reittiin lisätään tarkistus kirjautumisesta: siinä käytetään User-luokan metodia session_login(), joka palauttaa true, mikäli käyttäjä on kirjautunut.

<?php
Route
::add('/admin/', function() use ($userController,$storyController) {
    if(
$userController->getUser()->sessionLogin())
    {
        
$storyController->admin($userController->getUser());
    }
    else require 
'./views/loginform.view.php';
},
'get');

?>

UserControllerin getUser hakee nykyisen käyttäjän (luodaan userControllerin luomisen yhteydessä) ja tarkistaa, löytyykö istunnon ja käyttäjän ide account_sessions-taulusta (User-luokan session_login()-metodin avulla).

Jos käyttäjä löytyy, pyydetään storyControllerin admin()-mewtodia, muuten sisällytetään kirjautumislomake.

./controllers/StoryController.php - korjaa admin()-metodia

Lisää metodiin kirjoittajan id:n ja hänen kirjoittamiensa juttujen hakeminen.

<?php
    
public function admin($user)
    {
        
$id $user->getId();
        
$stories Story::get_stories_by_id($id);
        require 
'./views/admin.view.php';
    }
?>

./views/admin.view.php - korjaa näkymää

Lisää juttujen tulostus (linkkeineen) näkymään.

<?php
require './views/partials/admin_head.php';
if(isset(
$message)) echo $message;
if(!empty(
$stories)) {
    
    foreach(
$stories as $story) {?>
    <h1><a href="/adminstory/
    <?=$story->story_id ?>
    ">
    <?=$story->headline ?></a></h1>
    <h2><?=$story->published ?></h2>
    <p><?=$story->article ?></p>
    <p><a href="/editstory/<?=$story->story_id?>">Muokkaa</a></p>
    <p><a href="/deletestory/<?=$story->story_id?>">Poista</a></p>
    <?php
    
}
}

require 
'./views/partials/admin_end.php';


>> Tunti 10.Toteuta jutun lisäys ylläpitonäkymässä, tietojen tarkistus mukaan >>