ile

PHP ile içerik yönetim sistemi – 11 Kullanıcı girişi

13585621

Şu anda sistemimiz yol geçen hanı gibi. Elini kolunu sallayan girip güncelleme yapabiliyor. Tabii ki bunun böyle olmaması lazım. Yöneticilerin bir giriş ekranından kullanıcı adı ve parolalarını girip oturum açmaları, daha sonra yetkileri olan sayfaları görebilmeleri gerekmekte. Ayrıca sistemin, yetkisiz girişleri önleyebilmesi de gerekiyor. Kullanıcıların kendilerine ait olan profil sayfalarında kullanıcı adlarını, e-posta adreslerini ve parolalarını da değiştirebilmeleri lazım.

Bir diğer ihtiyacımız olan özellik ise, site ayarlarını tutacak olan tablo. Site yöneticisinin içerik yönetim sisteminin site adını, açıklamasını, copyright bölümü yazısını değiştirebileceği basit bir ayarlar bölümü olmalı ki, her seferinde kodlara müdahele etmek zorunda kalınmasın.

Tüm bunları yapmak için tahmin edebileceğiniz gibi iki tane veritabanı tablosuna ihtiyacımız var. Haydi bunları mySQL workbench kullanarak görsel olarak oluşturalım.

Şu anda veritabanımız gayet basit görünüyor:

Ekran Resmi 2014-08-31 21.23.54

 

Burada daha önceden yapmayı öğrendiğimiz şekilde yeni tablolarımızı oluşturalım.

Ekran Resmi 2014-09-01 08.21.00Ekran Resmi 2014-09-01 08.22.16

mySQL workbench bize ihtiyacımız olan sql kodunu oluştursun:

[code language=”sql”]
— —————————————————–
— Table `merakli`.`users`
— —————————————————–
CREATE TABLE IF NOT EXISTS `merakli`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) NULL,
`email` VARCHAR(255) NOT NULL,
`password` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;

— —————————————————–
— Table `merakli`.`settings`
— —————————————————–
CREATE TABLE IF NOT EXISTS `merakli`.`settings` (
`id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(45) NOT NULL,
`description` TEXT NULL,
`copyright` TEXT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;

[/code]

İki tablomuzu oluşturduktan sonra, mysql workbench programı ile doğrudan veritabanına bağlanıp yaptığımız değişiklikleri ‘Forward Engineer’ (İleri doğru mühendislik) aracıyla kaydedebilir ya da phpmyadmin programıyla ürettiğimiz SQL kodunu çalıştırabilirsiniz.

Sonuçta phpMyAdmin programını açtığımızda şöyle bir görüntüyle karşılaşmamız gerekli:

Ekran Resmi 2014-09-01 08.23.08

Son olarak deneme kullanıcımızı oluşturalım:

[code language=”SQL”]
INSERT INTO `merakli`.`users` (`id`, `username`, `email`, `password`) VALUES (‘1’, ‘kullanici’, ’email@adresim.com’, MD5(‘midori’));
[/code]

Burada parolası md5 ile şifrelenmiş “midori” olan kullanici adi ‘kullanici’, eposta adresi de ’email@adresim.com’ olan bir kullanıcı oluşturmuş olduk.

Veritabanı işlemlerimiz bitti. Şimdi sıra geldi sınıflarımızı oluşturmaya. Zaten elimizde add edit index delete vs. işlerini yapan soyut sınıfımız var. Oradan bu iki sınıfı da oluşturabiliriz.

Kullanıcılar sınıfını tasarlamakla işe başlayalım. Elimizde id hariç 3 tane değişken var. username (kullanıcı adı), password (parola) ve email (e-posta). Peki neyi nasıl yapmalı?

  1. Sistemde yönetici yoksa, demek ki sistem kurulum aşamasındadır. sisteme ilk kullanıcı parolasız eklenebilmeli. Kurulum bölümünü, ayarlar sınıfını tamamlarken yazacağız. (register)
  2. Kullanıcı sistemde oturum açabilmeli. (login)
  3. Kullanıcı parolasını, e-posta adresini ve kullanıcı adını değiştirebilmeli. Yalnız bu e-posta adresini ve kullanıcı adını değiştirirken, sistemde zaten olmayan bir kullanıcı adı ve e-posta seçtiğinden emin olmalıyız. (Gelişmiş sistemlerde bu değişiklikler yapıldığında e-posta ile onay ve bilgilendirme mesajları gider. Şimdilik bu konuya girmeyeceğiz.) (edit)
  4. Kullanıcı oturumunu kapatabilmeli. (logout)
  5. Kullanıcı isterse hesabını silebilmeli. Bunu da kullanıcının kendi hesabıyla ilgili işlemleri yaptığı profil sayfasına seçenek olarak koyabiliriz. (delete)
  6. Her kullanıcı aslında yönetici olduğu için diğer kullanıcıları da yönetebilmeli. (show)

Önce her sınıfta login olup olunmadığını kontrol eden checkLogin metodumuzu soyut Assets sınıfımıza ekleyelim. Add edit gibi admin metodları için oturup açılıp açılmadığını bu metod kontrol edecek.

[code language=”php”]
/**
* Sistemde oturum açılıp açılmadığını gösteren metod
*
* @return bool
*/
public function checkLogin()
{
// Burada tekrar oturum kontrolü yapıyoruz:
if(!isset($_SESSION[‘username’])){
return false;
//return array(‘render’=>false,’template’=>’public’,’message’=>’Lütfen oturum açınız!’);
}
else{
return true;
}
}
[/code]

PHP’de sunucuda scriptin heryerden erişebildiği değişkenlere $_SESSION deniyor. $_SESSION sunucuya her gelen ziyaretçi için ayrıca üretilir ve ziyaretçi siteden çıktığında silinirler. Biz de önce login metodunda bu değişkeni üreteceğiz. Ayrıca yazılımımız kullanıcılar için oturum açmalı bir sistem haline geldiğinden, program çalışır çalışmaz, session_start(); komutuyla index.php içinde oturumu çalıştırıyoruz.

Şimdi tek tek Kullanıcılar sınıfını oluşturduğumuz Lib klasörü Users.php dosyasını tek tek inceleyelim:

[code language=”php”]
<?php
/**
* Tüm sistemdeki kullanıcıları yönetecek olan kategori sınıfıdır.
*
* Sistemdeki yöneticilerin oturum açmalarını, parola değiştirmelerini sağlayan sınıf.
*
* @author Midori Kocak <mtkocak@mtkocak.net>
*/

namespace Midori\Cms;

use \PDO;

/**
* Class Users
* @package Midori\Cms
*/
class Users extends Assets
{

/**
* Yönetici kullanıcı adı
*
* @var string
*/
public $username;

/**
* Yönetici e-postası
*
* @var string
*/
public $email;

/**
* Yönetici parolası
*
* @var string
*/
private $password;

[/code]

Sınıfı tanımladık. Sınıfta metod tanımlarken bazı şeyleri farklı yapacağız. Sınıflarımız App.php sınıfı tarafından çağırılıyor ne de olsa. Sırayla inceleyelim. Kullanıcı eklememize yarayan add metodu:

[code language=”php”]
/**
* Kullanıcı ekleyen metod, verilerin kaydedilmesini sağlar. Sistemde hiç kullanıcı yoksa
* public olsun, kullanıcı varsa admin temasını işlesin. (render etsin)
*
* @param string $username Yönetici kullanıcı adı
* @param string $password Yönetici parola
* @param string $password2 Yönetici parola kontrol değeri
* @param string $email Yönetici e-posta
* @return bool eklendiyse doğru, eklenemediyse yanlış değer döndürsün
*/
public function add($username = null, $email = null, $password = null, $password2 = null)
{
$users = $this->index();
// Login olup olmadığımızı ve sistemde kullanıcı olup olmadığını kontrol eden metod.
if (!$this->checkLogin()) {
return false;
}

if ($password != $password2) {
return false;
}

// 3 değişkenin de boş olmaması gerekiyor
if ($username != null && $email != null && $password != null) {
// Önce veritabanı sorgumuzu hazırlayalım.
$query = $this->db->prepare("INSERT INTO users SET username=:kullaniciadi, password=:parola, email=:eposta");

$insert = $query->execute(array(
"kullaniciadi" => $username,
"parola" => md5($password),
"eposta" => $email,
));

if ($insert) {
// Veritabanı işlemi başarılı ise sınıfın objesine ait değişkenleri değiştirelim
$this->id = $this->db->lastInsertId();
$this->username = $username;
$this->password = $password;
$this->email = $email;

return true;
} else {
return false;
}
} else {
return array(‘render’ => true, ‘template’ => ‘admin’);
}
}
[/code]

Kullanıcı ekleme işlemini yaparken, oturum açılıp açılmadığını önce kontrol ettik. Eğer formdan gelen iki parola verisi eşit değilse de hata versin. Daha sonra metoda giren değişkenlerin boş olup olmadığını kontrol ediyoruz. Daha sonra diğer metodlarda yaptığımız gibi veritabanı metodlarımızı çalıştırıyoruz.

View/Users/add.php dosyası da şu şekilde, daha önceden anlattığımızdan pek de bir farkı yok.

[code language=”php”]
<?php
/*
*
* Adminlerin yeni kullanıcı eklediği sayfa
*
* Veriyi kullanıcıdan alacak ve gerekli yerlere göndereceğiz.
*
* @author Midori Kocak 2014
*
*/
?>
<form action="/Cms/index.php/Users/add" method="post">
<div class="row">
<div class="large-12 columns">
<label>Kullanıcı Adı
<input id="username" name="username" type="text" placeholder="Kullanıcı Adı" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>E-posta Adresi
<input id="email" name="email" type="text" placeholder="E-Posta Adresi" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>Parola
<input id="password" name="password" type="password" placeholder="Parola" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>Parola Tekrarı
<input id="password2" name="password2" type="password" placeholder="Parola Tekrarı" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<button type="submit">Submit</button>
</div>
</div>
</form>
[/code]

Tek kullanıcı gösterme metoduyla devam edeceğiz:

[code language=”php”]
/**
* Tek bir kullanıcı verisini edit işlemine yani profil sayfasına gönderen metod. Render edilmesin
*
* @param int $id Kullanıcının benzersiz index’i
* @return array gösterilebildyise dizi türünde verileri döndürsün, gösterilemediyse false, yanlış değeri döndürsün
*/
public function view($id)
{

// Login olup olmadığımızı ve sistemde kullanıcı olup olmadığını kontrol eden metod.
if (!$this->checkLogin()) {
return false;
}
// Eğer daha önceden sorgu işlemi yapıldıysa, sınıf objesine yazılmıştır.
if ($id == $this->id) {
return array("id" => $this->id, "username" => $this->username, "email" => $this->email, "password" => $this->password,);
} else {
// Buradan anlıyoruz ki veri henüz çekilmemiş. Veriyi çekmeye başlayalım
$query = $this->db->prepare("SELECT * FROM users WHERE id=:id");
$query->execute(array(‘:id’ => $id));

if ($query) {
$user = $query->fetch(PDO::FETCH_ASSOC);

$this->id = $user[‘id’];
$this->username = $user[‘username’];
$this->password = $user[‘password’];

$result = array(‘template’ => ‘admin’, ‘user’ => $user, ‘render’ => true);
return $result;
}
}

// Eğer iki işlem de başarısız olduysa, false, yanlış değer döndürelim.
return false;
}
[/code]

Bu metodu diğer metodlarda olduğu gibi kullanmayacağız. Sadece edit, yani güncelleme metodu için veri göndermesini sağlayacağız. Yani tek bir kullanıcıyı gösteren bir sayfa yerine, admin panelinde profilimigöster seçeneğine tıkladığımızda edit yani güncelle bölümü çağırılacak.

Listeleme metodu ise admin panelinde tüm kullanıcıları listelememize yarıyor.

[code language=”php”]
/**
* Tüm kullanıcıların listelenmesini sağlayan metod.
*
* @return bool listelenebildiyse doğru, listelenemediyse yanlış değer döndürsün
*/
public function show()
{

// Login olup olmadığımızı ve sistemde kullanıcı olup olmadığını kontrol eden metod.
if (!$this->checkLogin()) {
return false;
}

$query = $this->db->prepare("SELECT * FROM users");
$query->execute();
if ($query) {
// Buradaki fetchAll metoduyla tüm değeleri diziye çektik.
$result = array(‘render’ => true, ‘template’ => ‘admin’, ‘users’ => $query->fetchAll(PDO::FETCH_ASSOC));
return $result;
} else {
return false;
}
}
[/code]

Görüntülenmesinde yine bir fark yok. Metoddan dönen sonuç verisini, View/Users/show.php’de göstereceğiz.

[code language=”php”]
<?php
/*
*
* Yöneticilere verileri listeleyen sayfa
*
* Verileri bu tablo vasıtasıyla listeleyip,
* ID’ye göre silme ve düzenleme linklerini oluşturacağız.
*
* @author Midori Kocak 2014
*
*/
?>
<h2>Kullanıcılar</h2>
<table>
<thead>
<tr>
<th>Id</th>
<th>Kullanıcı Adı</th>
<th>E-posta</th>
<th>İşlemler</th>
</tr>
</thead>
<tbody>
<?php
foreach($users as $user):
?>
<tr>
<td><?=$user[‘id’]?></td>
<td><?=$user[‘username’]?></td>
<td><?=$user[’email’]?></td>
<td><a href="/Cms/index.php/Users/edit/<?=$user[‘id’]?>">Güncelle</a> <a href="/Cms/index.php/Users/delete/<?=$user[‘id’]?>">Sil</a></td>
</tr>
<?php
endforeach;
?>
</tbody>
</table>
[/code]

Soyut sınıfta index metodunu tanımladığımız için onu da yazmalıyız:

[code language=”php”]
/**
* Kullanıcıların listelenmesini sağlayan metod. Bu metodu liste çekmek için kullandık
* Bu metod da view metodu gibi render edilmiyor.
*
* @return bool listelenebildiyse doğru, listelenemediyse yanlış değer döndürsün
*/
public function index()
{
return $this->show();
}
[/code]

Show metodundan gelen veriyi aynısıylar döndürdük. Doğrudan show metodunda checkLogin yani oturum açılıp açılmadığını kontorl ettiğimiz için, başka bişi yazmaya gerek kalmadı.

Sıra düzenleme metodunda:

[code language=”php”]
/**
* Kullanıcıyı düzenlemeye yarar. Verilen Id bilginse göre, alınan bilgi ile sistemdeki bilgiyi değiştiren
* güncelleyen metod. Bu sayfa aynı zamanda kullanıcının profil sayfası olarak da görünmeli. View metodundan
* hazır verileri alıp göstersin.
*
* @param int $id Kategorinin benzersiz index’i
* @param string $username Yönetici kullanıcı adı
* @param string $password Yönetici parola
* @param string $password2 Yönetici parola kontrol değeri
* @param string $email Yönetici e-posta
* @return bool düzenlendiyse doğru, eklenemediyse yanlış değer döndürsün
*/
public function edit($id = null, $username = null, $password = null, $password2 = null, $email = null)
{
// Login olup olmadığımızı ve sistemde kullanıcı olup olmadığını kontrol eden metod.
if (!$this->checkLogin()) {
return false;
}

if ($password != $password2) {
return false;
}

if ($id != null && $username != null && $password != null && $email != null) {
// Önce veritabanı sorgumuzu hazırlayalım.
$query = $this->db->prepare("UPDATE users SET username=:kullaniciadi, password=:parola, email=:eposta WHERE id=:id");

$update = $query->execute(array(
"id" => $id,
"kullaniciadi" => $password,
"parola" => md5($password),
"eposta" => $email
));

if ($update) {
return true;
} else {
return false;
}
} else {
$oldData = $this->view($id);
return array(‘template’ => ‘admin’, ‘render’ => true, ‘user’ => $oldData[‘user’]);
}
}
[/code]

Her zaman yaptığımız gibi veritabanı işlemleri ve eğer data gelmediyse, yani forma veri girilmediyse, view metodundan gelen bilgiyi forma döndürdük. Görüntüsüne bakalım:

[code language=”php”]
<?php
/*
*
* Adminlerin kullanıcıları düzenlediği sayfa
*
* Kullanıcı ekleme işlemi ile neredeyse aynı formu kullanıyoruz.
* Ancak formda eski değerleri görebilmemiz için bu sayfaya $user değişkeninin
* hazır olarak gelmesi gerekiyor.
*
* @author Midori Kocak 2014
*
*/
?>

<form action="/Cms/index.php/Users/edit/<?=$user[‘id’]?>" method="post">
<div class="row">
<div class="large-12 columns">
<label>Kullanıcı Adı
<input id="username" name="username" type="text" placeholder="Kullanıcı Adı" value="<?=$user[‘username’]?>" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>E-posta Adresi
<input id="email" name="email" type="text" placeholder="E-Posta Adresi" value="<?=$user[’email’]?>" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>Parola
<input id="password" name="password" type="password" placeholder="Parola" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>Parola Tekrarı
<input id="password2" name="password2" type="password" placeholder="Parola Tekrarı" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<button type="submit">Submit</button>
</div>
</div>
</form>
[/code]

$user değişkeniyle gelen bilgiyi form içindeki input yani girişlere value yani değer olarak girdik.

Geldik en muhteşem ve en belalı metodumuza, login yani oturum aç metodu:

[code language=”php”]
/**
* Kullanıcı girişi yapan metod
*
* @param $username
* @param $password
* @return array
*/
public function login($username = null, $password = null)
{
if (!$this->checkLogin()) {
// Buradan anlıyoruz ki veri henüz oturum açılmamış.
$query = $this->db->prepare("SELECT * FROM users WHERE username=:kullaniciadi AND password=:parola");

$query->execute(array(
‘kullaniciadi’ => $username,
‘parola’ => md5($password),
));

if ($query) {
$user = $query->fetch(PDO::FETCH_ASSOC);

// Kullanıcı adı veya parolası hatalıysa
if (!$user) {
return array(‘template’ => ‘public’, ‘render’ => true, ‘message’ => ‘Hatalı kullanıcı adı veya parola.’);
}

$this->id = $user[‘id’];
$this->$username = $user[‘username’];
$this->$password = $user[‘password’];

// Session işlerini hallediyoruz.

$_SESSION[‘username’] = $user[‘username’];
$_SESSION[‘id’] = $user[‘id’];

return array(‘template’ => ‘admin’, ‘render’ => false, ‘message’ => ‘Oturum açıldı’, ‘user’ => $user);
}
} else {
return array(‘template’ => ‘admin’, ‘render’ => false, ‘message’ => ‘Zaten oturum açıldı!’);
}
return false;
}
[/code]

Burada farklı olan iki şey var. Birincisi login işleminde gelen parola bilgisini md5() metodu ile şifreledik. Ve gelen veriyi daha önceden yine md5 ile kaydettiğimiz için o bilgiyle karşılaştırdık ki, hacker abilerimiz veritabanımıza girseler de parolalarımız çalamasınlar. Tabii ki bu yöntem de 100% güvenli değil. Bunlara da güvenlik konusunu incelediğimizde gireriz. Ancak şu an için bu kadar güvenlik yeterli.

Ekran Resmi 2014-09-01 23.05.11

Login metodunun görüntüsü her sistemde olduğu gibi bir oturum açma sayfası olan form:

[code language=”php”]
<?php
/*
*
* Kullanıcıların oturum açtığı sayfa.
*
* Veriyi kullanıcıdan alacak ve gerekli yerlere göndereceğiz.
*
* @author Midori Kocak 2014
*
*/
?>
<div class="row">
<div class="small-6 large-centered columns">
<form action="/Cms/index.php/Users/login" method="post">
<div class="row">
<div class="large-12 columns">
<label>Kullanıcı adı
<input id="username" name="username" type="text" placeholder="Kullanıcı adı" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label>Parola
<input id="password" name="password" type="password" placeholder="Parola" />
</label>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<button type="submit">Gönder</button>
</div>
</div>
</form>
</div>
</div>
[/code]

Oturum açtıktan sonra da karşımıza gelen sayfa:

Ekran Resmi 2014-09-01 23.06.44

Dikkat ettiyseniz, işlemden sonra işlemin sonucunu bir mesajla görüntülüyoruz. Bunları login metodunun içindeki return dizisinin içindeki mesaj verisiyle hallettik.

Oturumu kapatmak için session değişkenini sileceğiz. Bunu da değişkenleri hafızadan silen unset() metoduyla halledeceğiz. Bir görünüm render etmesine gerek yok:

[code language=”php”]
/**
* Kullanıcının sistemden çıkmasını sağlayan metod
*
*/
public function logout()
{
unset($_SESSION[‘username’]);
return array(‘template’ => ‘public’, ‘render’ => false, ‘message’ => ‘Sistemden çıktınız’);
}
[/code]

Bu da anasayfaya dönerken “Sistemden çıktınız” mesajını gösterecek.

Son metodumuz kullanıcıları silen metod:

[code language=”php”]
/**
* Kullanıcı silen metod, verilerin silinmesini sağlar.
* Geri dönüşü yoktur.
*
* @param int $id Kategorinin benzersiz index’i
* @return bool silindiyse doğru, eklenemediyse yanlış değer döndürsün
*/
public function delete($id)
{
if (!$this->checkLogin()) {
return false;
}
$query = $this->db->prepare("DELETE FROM users WHERE id = :id");
$query->execute(array(
‘id’ => $id
));
return array(‘template’ => ‘admin’, ‘render’ => false);
}
[/code]

Bu metodun da sistemdeki diğer silme metodlarından farkı yok. Bu metoda, sistemde eğer kullanıcı kalmadıysa, silmeyi önlemek için return false işlemi konabilir. Ancak bunu size bırakıyorum.

Kullanıcı metodlarını bitirdikten sonra gelelim bu metodları App.php sınıfında, yani uygulamamızın ana sınıfında nasıl kullandığımızda. App sınıfında yaptığımız iki önemli değişiklik var. Birincisi, mesajları sisteme nasıl göndereceğimiz. Bunu www dizini içindeki admin.php ve public.php şemalarının içinde mesaj değişkeni tanımlandıysa göstereceğimiz kod parçasını $content değişkeninden hemen önce ekliyoruz:

[code language=”php”]
<div class="row">
<?php
if(isset($message)):
?>
<div data-alert class="alert-box">
<?=$message?>
<a href="#" class="close">&times;</a>
</div>
<?php
endif;
?>
<div class="large-12 columns">
<?php echo $content; ?>
</div>
</div>
[/code]

public.php de ve admin.php içinde de aynı kodu kullandık.

App.php yani uygulama sınıfındaki değişikliklere gelelim. Burasını dikkatle takip etmeniz gerekebilir.

[code language=”php”]
/**
* Sistemdeki bütün görüntüleme hesaplama işlemlerini yapan metod
*
* @param $request
* @param $data
* @return string
*/
public function calculate($request, $data)
{
// /posts/add gibi bir request geldi.
$params = split("/", $request);
$className = __NAMESPACE__ . ‘\\’ . $params[1];
//call_user_func_array
$class = new $className($this->db);
$class->getRelatedData($this->injectRelatedData());

// Bu sınıfı tamamen değiştirmemiz gerek. Kullanıcının oturum açıp açmadığını
// açtıysa, oturum bilgilerine göre neyin nasıl görüntüleneceğini belirlemeliyiz.
// Mesajlar uçuyordu halloldu

if (empty($data)) {
if ($params[2] != null) {
if (isset($params[3])) {
$data = $class->$params[2]($params[3]);
} else {
$data = $class->$params[2]();
}
if (isset($data[‘message’])) {
$message = $data[‘message’];
} else {
$message = null;
}

if (isset($data[‘renderFile’])) {
$params[2] = $data[‘renderFile’];
$renderFile = $data[‘renderFile’];
} else {
$renderFile = ‘show’;
}

if (isset($data[‘render’]) && $data[‘render’] != false) {
$content = array(‘message’ => $message, ‘related’ => $this->injectRelatedData(), ‘content’ => $this->render(‘./View/’ . $params[1] . ‘/’ . mb_strtolower($params[2]) . ‘.php’, $data));
return $this->render(‘./www/’ . $data[‘template’] . ‘.php’, $content);
} else {
if (isset($data[‘message’])) {
$message = $data[‘message’];
} else {
$message = null;
}
if ($class->show() != false) {
// login sayfasına gitsin
$data = $class->show();
$content = array(‘message’ => $message, ‘related’ => $this->injectRelatedData(), ‘content’ => $this->render(‘./View/’ . $params[1] . ‘/’ . $renderFile . ‘.php’, $data));
return $this->render(‘./www/’ . $data[‘template’] . ‘.php’, $content);
} else {
$content = array(‘message’ => $message, ‘related’ => $this->injectRelatedData(), ‘content’ => $this->render(‘./View/Users/login.php’, $data));
return $this->render(‘./www/public.php’, $content);
}
}
} else {

$data = $class->index();

if (isset($data[‘renderFile’])) {
$params[2] = $data[‘renderFile’];
$renderFile = $data[‘renderFile’];
} else {
$renderFile = ‘index’;
}

if (isset($data[‘message’])) {
$message = $data[‘message’];
} else {
$message = null;
}
$content = array(‘message’ => $message, ‘related’ => $this->injectRelatedData(), ‘content’ => $this->render(‘./View/’ . $params[1] . ‘/’ . $renderFile . ‘.php’, $data));
return $this->render(‘./www/’ . $data[‘template’] . ‘.php’, $content);
}
} else {
$data = call_user_func_array(array($class, $params[2]), $data);

if (isset($data[‘renderFile’])) {
$params[2] = $data[‘renderFile’];
$renderFile = $data[‘renderFile’];
} else {
$renderFile = ‘show’;
}

if (isset($data[‘message’])) {
$message = $data[‘message’];
} else {
$message = null;
}

if ($class->show() != false) {
// login sayfasına gitsin
$data = $class->show();
$content = array(‘message’ => $message, ‘related’ => $this->injectRelatedData(), ‘content’ => $this->render(‘./View/’ . $params[1] . ‘/’ . $renderFile . ‘.php’, $data));
} else {
$content = array(‘message’ => $message, ‘related’ => $this->injectRelatedData(), ‘content’ => $this->render(‘./View/Users/login.php’, $data));
}
return $this->render(‘./www/’ . $data[‘template’] . ‘.php’, $content);
}
}
[/code]

Hesaplama yani calculate metodu içinde yaptığımız en önemli değişiklik eğer herhangi bir metoddan sadece false yani hata değeri döndüyse, kullanıcıları doğrudan login sayfasına yönlendirmek. Ayrıca mesaj verisini de burada render metodlarımızın içine yedirdik. Bir başka değişiklik ise renderFile değişkeni. Bu değişken sayesinde eğer bir metodun farklı bir değişkenin görünümünü kullanmasını istiyorsak, metodun döndürdüğü dizi içinde bunu renderFile değişkeni ile tanımlıyoruz. Bu değişkeni daha çok settings yani ayarlar sınıfında tanımladık.

Son olarak, şu anda index.php yani kullanıcının ilk girdiği dosyada her giren kullanıcı için bir oturum bilgisi tanımlanmıyor. Bunu da session_start() metodu ile hallediyoruz:

[code language=”php”]
<?php
require ‘Vendor/autoload.php’;
require ‘Config/config.inc.php’;
require ‘Lib/App.php’;
session_start();

$app = new \Midori\Cms\App();
$app->connect($config[‘db’][‘host’],$config[‘db’][‘username’],$config[‘db’][‘password’],$config[‘db’][‘dbname’]);
$app->getSettings();

if(strpos($_SERVER[‘REQUEST_URI’],$_SERVER[‘SCRIPT_NAME’])!==false){
$request = str_replace($_SERVER[‘SCRIPT_NAME’], "", $_SERVER[‘REQUEST_URI’]);
}
else{
$request = "/Posts/";
}

if(!empty($_POST))
{
$data = $_POST;
}
elseif(!empty($_FILES))
{
$data = $_FILES;
}
else{
$data = "";
}
if(empty($request)){
$request = "/Posts/";
}
echo $app->calculate($request,$data);
[/code]

Oturum açma ile işlemlerimiz şimdilik bu kadar. Zor bir bölüm olduğunu kabul ediyorum. Ancak tek tek adım adım giderseniz, anlamak ve uygulamak gayet basit.

Bir sonraki yazıda ayarlar sınıfımızı tanımlayacağız.

Dayanışmayla.

Yorumla

Yorum