• Tidak ada hasil yang ditemukan

Uygulamalı Yazılım Projeleri.pdf

N/A
N/A
Protected

Academic year: 2021

Membagikan "Uygulamalı Yazılım Projeleri.pdf"

Copied!
283
0
0

Teks penuh

(1)YAZILIM UZMANLIĞI. Uygulamalı Yazılım Projeleri. Okan Tekeli. Editör C. Banu Üçüncüoğlu.

(2) Uygulamalı Yazılım Projeleri Okan Tekeli. Editör: C. Banu Üçüncüoğlu Kapak Tasarımı: Melih Sancar Grafik Tasarım: Tuna Erkan Grafik Uygulama: Soner Işık Genel Yayın Yönetmeni: Mehmet Çömlekçi. 1. Basım: Şubat 2008 Rev: 00 Bilge Adam Yayınları: 22 Eğitim Yayınları Dizisi:22 ISBN: 978-605-5987-20-6. Copyright © 2007, Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş. Eserin tüm yayın hakları Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.’ye aittir. Yayınevinden yazılı izin alınmadan kısmen ya da tamamen alıntı yapılamaz, hiçbir şekilde kopya edilemez, çoğaltılamaz ve tekrar yayımlanamaz. Bilge Adam’ın öğrencilerine ücretsiz armağanıdır, para ile satılamaz.. Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş. 19 Mayıs Mahallesi, 19 Mayıs Caddesi, UBM Plaza, No: 59-61, Kat: 4-7; Şişli, İstanbul Telefon: (212) 272 76 00 – (212) 217 05 55 Faks: (212) 272 76 01 www.bilgeadam.com - info@bilgeadam.com.

(3) İçindekiler Proje 1: herkesburada.com �������������������������������������������������������������������������������������������������������3 Görüşmeler�������������������������������������������������������������������������������������������������������������������������������3 Ahmet Becerikli (Proje Sahibi)���������������������������������������������������������������������������������������3 Uygulama Analizi�����������������������������������������������������������������������������������������������������������3 Uygulama Tasarımı������������������������������������������������������������������������������������������������������������������4 Veritabanı Tasarımı��������������������������������������������������������������������������������������������������������4 Arayüz Tasarımı�������������������������������������������������������������������������������������������������������������5 Proje 2: Otobüs Otomasyonu ������������������������������������������������������������������������������������������������107 Genel Bakış��������������������������������������������������������������������������������������������������������������������������107 Görüşmeler���������������������������������������������������������������������������������������������������������������������������107 Özgür Kolukısa (Genel Müdür)����������������������������������������������������������������������������������107 Selçuk Huysuz (Müşteri Hizmetleri Müdürü)��������������������������������������������������������������107 Baki Çokbilmiş (Personel Sorumlusu)������������������������������������������������������������������������107 Vildan Parasever (Muhasebe Sorumlusu)�����������������������������������������������������������������108 Uygulama Tasarımı��������������������������������������������������������������������������������������������������������������108 Veritabanı Tasarımı����������������������������������������������������������������������������������������������������108 Arayüz Tasarımı���������������������������������������������������������������������������������������������������������122 Uygulama�������������������������������������������������������������������������������������������������������������������166 Proje 3: DVDDukkani.com������������������������������������������������������������������������������������������������������169 Görüşmeler���������������������������������������������������������������������������������������������������������������������������169 Hüsamettin Beceriksiz (Proje Sahibi)�������������������������������������������������������������������������169 Uygulama Tasarımı��������������������������������������������������������������������������������������������������������������169 Veritabanı Tasarımı����������������������������������������������������������������������������������������������������169 Arayüz Tasarımı���������������������������������������������������������������������������������������������������������172 Ek - A: Teknik Terimler Sözlüğü��������������������������������������������������������������������������������������������237.

(4) Önsöz Yazılan bu proje kitabı, eğitiminiz boyunca göreceğiniz konuların toplu bir şekilde uygulamalarını yapabileceğiniz, size temel konularda pratik kazandırmayı hedefleyen, yol gösteren projelerden oluşuyor. Amacımız sizi oyuna hazır birer oyuncu olarak çıkarmak. Bu kitaptaki projeler içerisinde bir projeye başlanacağı zaman “Nereden başlamalı, nasıl ilerlemeli?” sorularına cevap bulacaksınız. Elinizdeki bu projeler derste işlenmeyecek, konu bitiminde sizlere taşın altına elinizi koymanız için yol gösterecek. Proje kitabı temelde eğitim odaklı ilerlemekte, verilen senaryolara destek amaçlı yazıldı. İlgili konu bittiği zaman projeyi adım adım takip ederek tamamlamanız, kitapta yazılmayıp sizden yapmanız istenen bölümleri yapmanız, verilen uyarı ve ipuçlarını kullanmanız sizlere proje yapmakta pratik kazandıracak.Yapılan bu projeler ile birlikte, sizlere verilen örnek senaryoları tamamlamanız, bir proje içerisindeki sorunları çözmenizde ve resmi daha en başından görebilmenizde büyük katkı sağlayacaktır. Kitaptaki projeleri tamamladıktan sonra örnek senaryoları bitirmeniz, eğitiminiz sonunda sizlere iş hayatına hazır birer yazılım uzmanı olma yolunda büyük katkı sağlayacaktır.. Umarım sizler için yararlı bir çalışma olur. İyi Çalışmalar. Okan Tekeli.

(5) 1. Proje 1: herkesburada.com.

(6) 1 Proje 1: herkesburada.com •. Görüşmeler. •. Uygulama Tasarımı.

(7) Proje 1: herkesburada.com Görüşmeler Ahmet Becerikli (Proje Sahibi) Yapmak istediğimiz web uygulaması sayesinde üyelerimizin site üzerinden arkadaşlıklar kurmalarını, birbirlerinin albümlerini görebilmelelerini ve mesaj atmalarını istiyoruz. Şu andaki mevcut internet sitelerindeki üye kayıt sayfaları kullanıcılardan detaylı bilgiler istiyor fakat bizim sitemize üye olurken sadece kullanıcının e-posta, şifre bilgisi ve rumuz girip üye olsun daha sonradan kendi profil bilgilerini düzenlesin. Sitemizde her sayfaya ancak üye olan kullanıcı erişebilir, üye olmayan kullanıcının herhangi bir işlem yapmasını istemiyoruz. Üye profili olarak ise Tablo 1.1‘de verilen bilgileri girmesini istiyoruz. Tablo 1.1: Müşteri İhtiyaçları Tablosu Ad. Hakkında. Soyad. Rumuz. Doğum Tarihi. Dinlediği Müzik. Cinsiyet. Meslek. Eğitim Durumu. Okuduğu Kitaplar. Bulunduğu Şehir. Tuttuğu Takım. Bulunduğu Ülke. Yaptığı Spor. Hobileri. Sigara İçer mi. Fobileri. Alkol Kullanır mı. İstediğim zaman eğitim durumu, ilgi alanı, şehir, ülke, meslek ve takım tanımlamalarını yapabilmeliyim. Profil bilgilerini kimlerin görebileceğini kullanıcı belirlesin. İsterse herkes görür, isterse sadece arkadaşları görebilir. Üyeler kendi profil resimleri haricinde farklı albümler oluşturabilsin ama bu albümleri herkes göremesin, profil görüntülemedeki gibi sadece arkadaşlar veya herkes görebilsin deme imkanı olmalı. Üyeler birbirlerine özel mesaj atabilsinler. Mesaj atarken eğer mesaj atacağı üye kullanıcının arkadaşı ise kullanıcı adının veya kime kısmının yazılacağı yer otomatik tamamlansın, eğer arkadaş değil ise tamamlanmasın. Burada teklif dediğimiz bir sistem olmalı. Arkadaşlık teklifi sonrasında iki kullanıcı arkadaş olabilecek ve albüm, profil gibi bilgilere erişmeye başlayacak. Çoğu arkadaşlık sitesinde bulunan titreşim gönderme ya da çiçek ısmarlama gibi uygulamalar istemiyoruz sadece mesaj göndersin yeter. Kullanıcılar arkadaş listelerindeki online arkadaşları ile chat yapabilsin istiyoruz. Bazı internet sitelerinde kullanıcılar kendi ana sayfalarını özelleştirebiliyor. Bizim sitemizde de kullanıcılar sayfalarında istedikleri bölümleri göstersin, istemediklerini göstermesin. Farklı tema seçenekleri olsun. Bir de bazı siteler kullanıcı işlem yaparken ekranda kalıyor hiç gelip gitmiyor, tıpkı Windows uygulaması gibi hemen işlem yapıyor, bizim sitemiz de o şekilde olsun. Uygulamada 2 rol istiyoruz. Bunlardan biri admin diğeri ise standart. Admin grubu uygulama içerisinde kullanıcı rol değiştirme, şifre resetleme ve yönetmesini istediğimiz bilgileri yönetme gibi işlemleri yapacak. Standart rolü ise bildiğimiz üye olacak.. Uygulama Analizi Projeye başlamadan önce bir analiz yapılacak olursa; 1. Uygulama rol bazlı olacak. Uygulama içerisinde kullanıcılar istediği yerleri özelleştirebileceği için web part kullanılacak ve Windows uygulaması gibi hızlı tepki verebilmek için ajax teknolojisi kullanılacak..

(8) . Proje 1. 2. Kullanıcılar arası mesajlaşma sistemi olacak. 3. Kullanıcılar sadece onayladıkları kullanıcılar ile mesajlaşabilecek 4. Chat uygulaması olacak. 5. Kullanıcı bazlı fotoğraf galerisi olacak. 6. Tartışma grupları oluşturulabilecek, gerektiğinde mesajlar mail atılacak.. Uygulama Tasarımı Veritabanı Tasarımı . Asp.Net membership alt yapısı kullanılacağı için veritabanı sunucunuzu açın.. . HerkesBuradaDb isminde veritabanı oluşturun.. . Başlat > Programlar > Visual Studio 2008 > Visual Studio Tools < Visual Studio 2008 Command Prompt aracını çalıştırın. Uygulama kısayolu programlar menüsünde bulunamıyorsa Başlat > Çalıştır > “C:\Program Files\Microsoft Visual Studio 9.0\VC\” komutunu yürütün.. . Aspnet_regsql komutunu çalıştırın. Çıkan sihirbazdan HerkesBuradaDb veritabanı seçin ve yapılandırın.. Şekil 1.1: Membership veritabanı oluşturmak.. Veritabanının üyelik sistemini kullanacağı tablolar oluşturulduktan sonra HerkesBuradaDb veritabanını açın. Şekil 1.2 ile Şekil 1.9 arasındaki tablolaları aspnet_regsql aracı ile oluşturulan membership tablolarına ek olarak oluşturun.. Şekil 1.2: Sehirler tablosu.. Şekil 1.4: Albumler tablosu.. Şekil 1.3: Takimlar tablosu.. Şekil 1.5: ArkadasListesi tablosu..

(9) herkesburada.com. Şekil 1.6: EgitimDurumlari tablosu.. Şekil 1.7: Fotograflar.. Tüm tablolardaki primary key sütunlarınının identity specification‘ı Yes yapılmalı ve identitty increment ve seed 1 olarak belirtilmelidir.. Şekil 1 8: Mesajlar tablosu.. Şekil 1.9: Meslekler tablosu.. Oluşturulan tablolardaki ilişkileri yapılandırın. Kaynak Tablo. Kaynak Sütun. Hedef Tablo. Hedef Sütün. Albumler. KullaniciId. aspnet_Users. UserId. ArkadasListesi. Kim. aspnet_Users. UserId. ArkadasListesi. Kimin. aspnet_Users. UserId. Fotograflar. AlbumId. Albumler. AlbumId. Arayüz Tasarımı Visual Studio programını açın. New > Web Site > şablonunu seçin. Proje adını HerkesBuradaWebUI şeklinde verin. Dil olarak C# seçin. Version olarak ise .Net Framework 3.5 seçin.. Şekil 1.10 : Yeni web sitesi oluşturma ekranı.. Uygulama oluşturulduktan sonra Solution Explorer penceresinden web.config dosyasını açın. Asp.Net membership altyapısından yararlanabilmek için configuration düğümü içerisinde (system.web düğümü hemen üzerine) connectionStrings düğümü ekleyin. Mevcut ConnectionString düğümü silinmeli ve daha sonra aşağıdaki düğüm eklenmeli (Liste 1.1).. .

(10) . Proje 1. <connectionStrings> . <clear/>. <add name=”LocalSqlServer” connectionString=”server=.;data base=HerkesBuradaDb;user id=dbUser;password=123”/> </connectionStrings> Liste 1.1: Web.config connectionStrings tanımlaması. Uygulamayı yapılandırmak için Asp.Net Configuration aracını açın. Bu aracı açmak için Web Site > Asp.Net Configuration menüsünü takip edebilirsiniz.. Şekil 1.11: Asp.Net Web Administration Application.. Açılan Asp.Net Web Application Administration sitesinden security sekmesine gelin. Şekil 1.11 haricinde bir çıktı görünüyorsa, hatayı okuyarak sorunu giderin. Oluşabilecek muhtemel hatalar; . Web.config dosyası içerisinde connection string’in yanlış yazılması ve yazım hatası (“;” kullanmayı unutmak).. . Sql Server veritabanına bağlantı kurulamaması.. . Bağlanılmak istenen veritabanı sunucusunun çalışmıyor olması.. Sorunsuz bağlantı sağdıktan sonra sırası ile; 1. Security sekmesi altındaki Users bölümü içerisinden Select authentication type link’ine tıklayın. 2. From Internet seçeneği seçin. Done butonuna tıklayın. 3. Security Sekmesi içerisinden Roles bölümünden Enable Roles link’ine tıklayın. 4. Security Sekmesi içerisinden Roles bölümünden Create or Manage roles link’ine tıklayın. 5. Admin ve Standart olarak 2 adet rol ekleyin..

(11) herkesburada.com. 6. Internet Explorer penceresini kapatıp uygulamaya dönün. 7. Uygulamaya geri dönüldüğü zaman web.config dosyasında yapılan değişiklikler yüzünden Visual Studio dosya değişiklik uyarısı verecektir. Çıkan uyarıya Yes to All diyerek onaylayın. 8. Solution Explorer penceresinden uygulama üzerinde sağ tıklayın. New Folder menüsünü işaret edin. Klasör ismini admin olarak verin. 9. Asp.Net Configuration aracını çalıştırın. Solution Expolorer penceresi üzerindeki en sağda bulunan ikona tıklayarak açabilirsiniz. (Şekil 1.12) 10. Security sekmesinden Access Rules bölümünden Create access rules link’ine tıklayın. 11. Select a directory for this rule bölümden admin klasörünü seçin. Rule applies to bölümünden Role radio button kontrolünü seçin. Karşısındaki dropdownlist’ten Admin seçin.. Şekil 1.12: Asp.Net Configuration Tool’u çalıştırmak.. 12. Permission bölünden Allow seçeneğini seçin ve OK butonuna tıklayın. 13. Security sekmesinden Access Rules bölümünden Create access rules link’ine tıklayın. 14. Select a directory for this rule bölümden admin klasörünü seçin Rule applies to bölümünden All users radio button kontrolünü seçin. Permission bölünden Deny seçeneğini seçin. 15. OK butonsuna tıklayın ve web administration tool’u kapatın. Bu adımları bitirdikten sonra Solution Explorer penceresinden admin klasörü üzerinde sağ tıklayın, Refresh Folder menüsünü seçin. Klasör içerisinde bir web.config olduğu görünecek. Bu dosyaya izin verilen ve yasaklanan gruplar eklendi. Bu aşamaya kadar uygulama içerisine 2 rol tanımlandı. Tanımlanan bu rollerden admin rol grubuna, uygulama içerisindeki admin klasörüne erişimine izin verildi, diğer tüm kullanıcılara kapatıldı. Bir web uygulaması içerisinde klasöre erişim izni verirken ilk önce erişimine izin verilecekleri (allow) daha sonra yasaklanacak kullanıcı veya rolleri atayın. İlk önce tüm kullanıcılara yasaklanırsa, daha sonradan izin verilen kullanıcılar bile erişemeyecek. Yanlış kullanıma örnek olarak; <authorization> <deny users=”*” /> <allow roles=”Admin” /> </authorization> Liste 1.2: Yanlış tanımlanmış authorization düğümü. Standart olarak membership altyapısı içerisinde kullanıcıların kullanacakları şifre formatı en az 7 karakter olmalı ve bunlardan biri alfa numeric karakter (#,@,? gibi.) olmalı. Uygulama içerisinde bu ayarı değiştirmek için web.config dosyasında membership ayarlarını kendiniz belirleyin. Web. config dosyasına system.web düğümü içerisine Liste 1.3’deki kodu ekleyin. <membership> . <providers>. . <clear/>. . <add name=”AspNetSqlMembershipProvider”. type=”System.Web.Security.SqlMembershipProvider, System. Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d 50a3a” . connectionStringName=”LocalSqlServer”. .

(12) . Proje 1. . enablePasswordRetrieval=”false”. . enablePasswordReset=”true”. . requiresQuestionAndAnswer=”true”. . applicationName=”/”. . requiresUniqueEmail=”false”. . passwordFormat=”Hashed”. . maxInvalidPasswordAttempts=”5”. . minRequiredPasswordLength=”5”. . minRequiredNonalphanumericCharacters=”0”. . passwordAttemptWindow=”10”. . passwordStrengthRegularExpression=”” />. . </providers>. </membership> Liste 1.3: Web.config dosyasında ezilmiş membership bilgileri. Bu ayardan sonra web uygulaması için şifre uzunluğu en az 5 karakter olacak ve alfa numeric karakter zorunluluğu olmayacak. Web uygulanmasının admin rolüne sahip kullanıcısını tanımlamak için Asp.Net Configuration aracını çalıştırarak security sekmesinden Users bölümü içerisindeki Create User link’ine tıklayın. Admin kullanıcı isminde bir kullanıcı tanımlayın. Admin kullanıcısı oluşturulurken Admin rolü seçili olmalı.. Kullanıcı bilgilerini tutmak için (Ad, Soyad, Doğum Tarihi) profile kullanın. Profile tanımlaması için web.config içerisinde profile düğümünü ezin. Müşterinin istediği kullanıcı bilgilerini tanımlayın.. <profile> . <properties>. . <group name=”KisiselBilgiler”>. . <add name=”Ad” type=”System.String”/>. . <add name=”Soyad” type=”System.String”/>. . DateTime”/>. <add name=”DogumTarihi” type=”System.. . Boolean”/>. <add name=”Cinsiyet” type=”System.. . type=”System.String”/> . <add name=”YasadigiSehirId”. </group>. . String”/>. <add name=”EgitimDurumId” type=”System.. . <add name=”Hobileri” type=”System.String”/>. . <add name=”Fobileri” type=”System.String”/>. . <add name=”Hakkinda” type=”System.String”/>. . <add name=”MeslekId” type=”System.String”/>. . String”/>. <add name=”OkuduguKitaplar” type=”System.. . String”/>. <add name=”TuttuguTakimId” type=”System..

(13) herkesburada.com. . String”/>. <add name=”YaptigiSporlar” type=”System.. . Boolean”/>. <add name=”SigaraKullanirMi” type=”System.. . Boolean”/>. <add name=”AlkolKullanirMi” type=”System.. . <add name=”ProfilYetki” type=”System.Boolean” defaultValue=”true”/> . <add name=”ProfilResmi” type=”System.String” defaultValue=”resimyok.jpg”/> . </properties>. . </profile>. Profile düğümü System.Web içerisinde yer alır.. Liste 1.4: web.config profile tanımlaması. Güvenlik için web.config dosyasında kullanılacak authentication tanımlamasını yapın. Standart olarak web.config içerisinde bu düğüm bulunur. Authentication düğümünü Liste 1.5’teki şekilde yapılandırın. <authentication mode=”Forms”> . forms> . <forms defaultUrl=”~/kullanici/default.aspx”></. </authentication>. Liste 1.5: web.config authentication düğümü. Uygulama içerisinde theme dışındaki stilleri tanımlamak için Style isminde bir klasör oluşturun ve içine Genel.css isminde stylesheet ekleyin. Eklenen dosyanın içeriğini temizleyin. Eklenen bu stil belgesi içerisine Liste 1.6’da belirtilen stili tanımlayın. * { font-family: Tahoma, Arial, Helvetica; } #SayfaAna { width: 70%; text-align: left; border: 1px solid #89a5e0; border-top: none; } .AnaIcerik { width:100%; height:100%; text-align:left;. .

(14) 10. Proje 1. } #Menu { background-color: #89a5e0; height: 30px; width: 100%; } #Baslik { background-color:#3b5998; } #Icerik { padding: 10px 20px; } #SonBlum { text-align: center; font-weight: bold; color: Gray; text-decoration: none; margin-top: 10px; } body { margin: 0 auto 0 auto; padding: 0; color: #000000; text-align: center; } .SolMenu {. width:20%; float:left;. } .KullaniciIcerik.

(15) herkesburada.com. { width:79%; float:right; font-size:small; font-family:Verdana; } .KullaniciIcerik a { font-size:small; } a, a:link, a:visited, a:active { color: #000; text-decoration: none; } a:hover { text-decoration: underline; } #Menu, #Menu a { color: #fff; font-size: 18px; font-weight: bold; text-decoration: none; } #Menu .Separator { font-size: 18px; } #Menu .Text { font-size: 14px; } img { border: none;. 11.

(16) 12. Proje 1. } p { margin-top: 0; } h1, h2, h3 { margin: 0; margin-bottom: 2px; } h1 { font-size: 16px; } h2 { font-size: 15px; color: #de4d52; } h3 { font-size: 13px; } Liste 1.6: Genel.css. Uygulama içerisine SiteResimleri isminde bir klasör ekleyin ve size verilen proje materyalleri içerisindeki SiteResimleri klasörü içindekileri bu klasöre kopyalayın. Tasarım tanımlandıktan sonra her sayfada kullanılacak olan sayfanın en üstünde görünecek menüyü tanımlayın. Bu menu kullanıcının rolüne göre değişiklik göstereceği için Login View kontrolü kullanın. Bilindiği gibi bu kontrol üye girişi yapan ve yapmayan kişilere göre veya farklı rollere göre görünüm kazanır. Uygulamaya Controls isminde bir klasör oluşturun ve içine UstMenu isminde bir Web User Control ekleyin. (Liste 1.7) <%@ Control Language=”C#” AutoEventWireup=”true” CodeFile=”UstMenu.ascx.cs” Inherits=”Controls_Menu” %> <table cellpadding=”0” cellspacing=”0” style=”width: 700px; height: 30px;”> <tr> <td style=”width: 500px; vertical-align: middle;”> &nbsp;.

(17) herkesburada.com. <a id=”A1” href=”~/” runat=”Server”>Ana Sayfa</a> <span class=”Separator”>|</span>&nbsp; <asp:LoginView runat=”server” ID=”lv1”> <AnonymousTemplate> <a id=”A4” href=”~/Login.aspx” runat=”Server”>Giriş</a> </AnonymousTemplate> <LoggedInTemplate> <asp:LinkButton ID=”lnkLogout” runat=”server” OnClick=”lnkLogout_Click” >Çıkış</asp:LinkButton> </LoggedInTemplate> <RoleGroups> <asp:RoleGroup Roles=”Admin”> <ContentTemplate> <asp:LinkButton ID=”lnkLogout” runat=”server” OnClick=”lnkLogout_Click” >Çıkış</asp:LinkButton> <span class=”Separator”>|</span> <a id=”A5” href=”../ Admin/default.aspx” runat=”Server”> Yönetim</a> </ContentTemplate> </asp:RoleGroup> </RoleGroups> </asp:LoginView> </td> <td style=”width: 200px; text-align: right; vertical-align: middle;”> </td> </tr> </table> Liste 1. 7: Ustmenu.ascx html tasarımı. Oluşturulan üst menü kullanıcıların giriş yapmalarını sağlayacak, eğer admin rol grubunda ise bu gruba ait özel bir link çıkartmayı sağlayacak. lv1 ismindeki Login View kontrolü içinde standart haricinde bir de admin rolündeki kullanıcılar için bir template oluşturulmuştur. Admin rolüne sahip kullanıcılar, admin klasörüne yönlendirilecek. Çıkış butonuna tıklandığı zaman çıkış yapabilmek için lnkLogout button kontrolünün Click olayında kullanıcı çıkış işlemini yaptırın. (Web User Control’ün kod dosyası - Liste 1.8.) protected void lnkLogout_Click(object sender, EventArgs e) { FormsAuthentication.SignOut(); Session.Clear(); Response.Redirect(“~/default.aspx”); } Liste 1.8: lnkLogout linkbutton kontrolü Click olayı.. 13.

(18) 14. Proje 1. Uygulamanın tasarımda tek bir arayüz kullanabilmek için Ajax Master Page ekleyin ve ismini herkesburada.master olarak belirleyin ve Liste 1.9’da belirtilen tasarımı yapın. <%@ Master Language=”C#” AutoEventWireup=”true” CodeFile=”herkesburada.master.cs” Inherits=”herkesburada” %> <%@ Register Src=”Controls/UstMenu.ascx” TagName=”Menu” TagPrefix=”uc1” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” > <head id=”Head1” runat=”server”> <title>Herkes Burada</title> <link href=”Style/Genel.css” rel=”stylesheet” type=”text/css” /> </head> <body> <form id=”form1” runat=”server”> <div id=”SayfaAna”> <div id=”Baslik”> <img src=”~/SiteResimleri/Logo.gif” runat=”server” id=”imgLogo” alt=”Herkes Burada” /></div> <div id=”Menu”> <uc1:Menu ID=”Menu1” runat=”server” /> <asp:ScriptManager ID=”ScriptManager1” runat=”server”> </asp:ScriptManager> </div> <div id=”Icerik”> <asp:ContentPlaceHolder ID=”AnaIcerik” runat=”server”> </asp:ContentPlaceHolder> </div> </div> <div id=”SonBolum”> <!-- Daha sonradan buraya copyright bilgileri gelebilir. -> </div> </form> </body> </html> Liste 1.9: herkesburada.master dosyası tasarımı. Herkesburada.master master sayfasının UstMenu.ascx user control’ü eklenmiş ekran görüntüsü Şekil 1.13’de belirtilmiştir..

(19) herkesburada.com. Şekil 1.13: herkesburada.master sayfa tasarımı.. Bu aşamadan sonra uygulamaya eklenecek tüm Ajax Web Form’larını herkesburada.master dosyasından türetin. Yeni bir Ajax Web Form eklerken master page seçtirip herkesburada.master dosyasını seçin. Kullanıcıların kayıt olabilmelelerini sağlamak için kayit.aspx isminde bir Ajax Web Form ekleyin.. Web Form eklerken master page seçtirmeyi unutmayın.. kayit.aspx içerisine bir fieldset ekleyin. Eklenecek fieldset’i Content Place Holder içerisine ekleyi unutmayın. <fieldset style=”width: 320px; height: 260px”> <legend>Yeni Üye?</legend> </fieldset> Eklenen bu fieldset içerisine Create User Wizard kontrolü ekleyin. ID özelliğini KullaniciKayit olarak değiştirin. Özelliklerinde Türkçeleştirilebilen tüm özellikleri Türkçeleştirin. Örneğin PasswordLabelText özelliğini Şifre olarak değiştirin. Ek olarak Tablo 1.2’deki özellikleri atayın. Tablo 1.2: CreateUserWizard Kontrolünde Değiştirikecek Özellikler Özellik. Değer. ContinueDestinationPageUrl. ~/kullanici/default.aspx. Kayit.aspx formunun tasarımı Şekil 1.14’deki gibidir.. Şekil 1.14: Kayit.aspx sayfası.. Uygulama içerisinde 2 rol kullanılacak. Kayıt olan kullanıcının Standart rol grubuna alınması için kayıt esnasında kayıt olan kullanıcıyı bu gruba dahil edin. Bunun için CreateUserWizard kontrolünün CreatedUser olayında kullanıcıyı standart rol grubuna alın. protected void KullaniciKayit_CreatedUser(object sender, EventArgs e) {. 15.

(20) 16. Proje 1. MembershipUser user = Membership.GetUser(KullaniciKayit. UserName); Roles.AddUserToRole(KullaniciKayit.UserName, “Standart”); Membership.UpdateUser(user); } Liste 1.10: Kayıt olan kullanıcıyı standart rol grubuna alma kodu. Kayıt olan kullanıcının giriş yapmasını sağlayacak olan Login.aspx sayfası için uygulamaya Web Form ekleyin ve ismini login.aspx olarak belirleyin. Kayit.aspx sayfasındaki gibi fieldset ekleyin ve içerisine Login kontrolü atın. Türkçeleştirilebilen özellikleri Türkçeleştirin ve ek olarak Tablo 1.3‘deki özellikleri atayın. Tablo 1.3: Login.aspx Sayfası Üzerindeki Login Kontrolüne Eklenecek Özellikler Özellik. Değer. CreateUserText. Beni de aranıza alın. CreateUserUrl. ~/kayit.aspx. PasswordRecoveryText. Şifremi Unuttum. PasswordRecoveryUrl. ~/sifrehatirlat.aspx. Login.aspx sayfasının çıktısı Şekil 1.15‘de gösterilmiştir.. Şekil 1.15: Login.aspx sayfasının tasarım görünümü.. Uygulamaya sifrehatirlat.aspx isimli bir tane Web Form ekleyin. Sayfadaki Content’e PasswordRecovery kontrol ekliyin. Türkçeleştirilebilen özellikleri Türkçeleştirin. Sifrehatirlat.aspx sayfasının görüntüsü Şekil 1.16’da gösterilmiştir.. Şekil 1.16: SifreHatirlat.aspx sayfasının tasarım görünümü..

(21) herkesburada.com. Bir ziyaretçi web sitesine ilk girdiği zaman kullanıcıyı karşılayacak olan default.aspx sayfasını uygulamaya ekleyin. <%@ Page Language=”C#” MasterPageFile=”~/herkesburada.master” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_ Default” Title=”Herkesburada.com” %> <asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <center> <asp:Panel ID=”Panel1” runat=”server” CssClass=”AnaIcerik” Height=”100%” Width=”70%”> <p> &nbsp;</p> <p> <font style=”font-size: small; color: gray; fontfamily: Verdana”>&nbsp;Album ouşturun, arkadaşlarınız ile mesajlaşın, yeni arkadaşlar bulun, profil güncelleyin ve albumlere göz atın.&nbsp;</font></p> <center> <asp:Button ID=”btnKaydol” runat=”server” BackColor=”Green” Font-Names=”Verdana” Font-Size=”Small” ForeColor=”White” OnClick=”btnKaydol_Click” />. Text=”Aramıza Katıl”. </center> </asp:Panel></center> </asp:Content> Liste 1.11: Default.aspx html tasarım görünümü. btnKaydol button kontrolünün Click olayında giriş sayfasına yönlendirme yapın. Load olayında ise eğer kullanıcı giriş yapmışsa Kullanici klasörüne yönlendirin. protected void Page_Load(object sender, EventArgs e) { if (User.Identity.IsAuthenticated) Response.Redirect(@”~\kullanici\default.aspx”); } protected void btnKaydol_Click(object sender, EventArgs e) { Response.Redirect(“login.aspx”); } Liste 1.12: Default.aspx kod satırı.. 17.

(22) 18. Proje 1. Şekil 1.17: Default.aspx sayfa tasarım görünümü.. Web sitesinde oluşabilecek hataları kullanıcıya daha güzel ve anlaşılır göstermek için hata sayfaları yapın. Hata isminde bir klasör ekleyin. 404 hata kodu internet sitelerinde bulunamayan sayfaları, 403 nolu hata kodu ise erişilmeye yasak sayfaları belirtir. Bir web uygulamasında oluşabilecek en sık hatalar 404 ve 403 hatalarıdır. Bu hatalar için ayrı birer sayfa, diğer tüm hatalar için ise tek bir sayfa yapabilirsiniz. Bu klasöre 404.aspx isminde bir Web Form ekleyin. Aradığınız sayfaya ulaşılamıyor hatasını kullanıcıya gösterin. <%@ Page Language=”C#” MasterPageFile=”~/herkesburada.master” AutoEventWireup=”true” CodeFile=”404.aspx.cs” Inherits=”Hata_404” Title=”Untitled Page” %> <asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <font color=”Red”> <center> &nbsp;</center> <center> &nbsp;</center> <center> Hata oluştu ve yöneticiye bildirildi. <br /> Aradığınız sayfaya ulaşılamıyor. </center></font> </asp:Content> Liste 1.13: 404.aspx hata sayfası html tasarımı. Aynı şekilde 403.aspx sayfası ekleyin ve “Bu sayfaya erişim izniniz yok” mesajı verdirin. Bu hatalar haricinde oluşabilecek her hata için genel bir generic hata sayfası yapın ve ismini hata.aspx verin. <%@ Page Language=”C#” MasterPageFile=”~/herkesburada.master” AutoEventWireup=”true” CodeFile=”hata.aspx.cs” Inherits=”Hata_ hata” Title=”Untitled Page” %> <asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <font color=”Red”> <center> &nbsp;</center> <center>.

(23) herkesburada.com. &nbsp;</center> <center> Hata oluştu ve yöneticiye bildirildi. <br /> İşleminizi tekrar deneyin. </center></font> </asp:Content> Liste 1.14: Hata.aspx sayfası html tasarımı. Web.config dosyasını açıp oluşturulan hata sayfalarını tanıtın. Artık IIS kendi hata mesajları yerine sizin özelleştirdiğiniz hata sayfalarını (custom error page) gösterecek. <customErrors mode=”RemoteOnly” defaultRedirect=”~/Hata/hata. aspx”> . <error redirect=”~/Hata/404.aspx” statusCode=”404”/>. . <error redirect=”~/Hata/403.aspx” statusCode=”403”/>. . </customErrors>. Liste 1.15: Web.Config CustomErrors düğümü. Giriş yapan kullanıcıların erişeceği sayfaları Kullanıcı klasörü altında toplamak için uygulamaya Kullanici klasörü ekleyin. Eklenen klasöre ilk olarak web.config dosyası ekleyin ve sadece giriş yapmış kullanıcıların bu klasöre erişmesine izin verin. <?xml version=”1.0” encoding=”utf-8”?> <configuration> <system.web> <authorization> <allow roles=”Standart” /> <allow roles=”Admin” /> <deny users=”?” /> </authorization> </system.web> </configuration> Liste 1.16: Kullanıcı klasörü içerisindeki web.config dosyası. Controls klasörü içerisine her sayfada görünecek olan sol menu için KullaniciSolMenu.ascx isminde Web User Control ekleyin. Bu menüde kullanıcının profil resmi, sayfalarda gezinmesini sağlayacak Menu kontrolü ve kullanıcı aramasını sağlayacak arama bölümü olacak. <%@ Control Language=”C#” AutoEventWireup=”true” CodeFile=”Kullan iciSolMenu.ascx.cs” Inherits=”Controls_KullaniciSolMenu” %> <fieldset style=”height: auto; width: auto”> <legend><font style=”font-size:smaller”>Bilgilerim</font></ legend> <br />. 19.

(24) 20. Proje 1. <a href=”profilresmi.aspx” title=”Resminizi Guncelleyin”><c enter><asp:Image ID=”imgUser” runat=”server” AlternateText=”Uye Resminiz” GenerateEmptyAlternateText=”True” /></center></a><br /> <font style=”font-size:x-small”>&nbsp; Hoşgeldin</font> <asp:LoginName ID=”LoginName1” runat=”server” FontNames=”Verdana” Font-Size=”X-Small” ForeColor=”Blue” /> </fieldset> <br /> <asp:Menu ID=”Menu1” runat=”server” BackColor=”#E3EAEB” DynamicHorizontalOffset=”2” Font-Names=”Verdana” Font-Size=”Small” ForeColor=”#666666” Height=”115px” StaticSubMenuIndent=”10px” Width=”158px”> <StaticMenuItemStyle HorizontalPadding=”5px” VerticalPadding=”2px” /> <DynamicHoverStyle BackColor=”#666666” ForeColor=”White” /> <DynamicMenuStyle BackColor=”#E3EAEB” /> <StaticSelectedStyle BackColor=”#1C5E55” /> <DynamicSelectedStyle BackColor=”#1C5E55” /> <DynamicMenuItemStyle HorizontalPadding=”5px” VerticalPadding=”2px” /> <Items> <asp:MenuItem Text=”Mesajlarım” Value=”Mesajlarım” NavigateUrl=”~/Kullanici/mesajlarim.aspx”></asp:MenuItem> <asp:MenuItem Text=”Arkadaşlarım” Value=”Arkadaşlarım” NavigateUrl=”~/Kullanici/arkadaslarim.aspx”></asp:MenuItem> <asp:MenuItem Text=”Albumlerim” Value=”Albumlerim” NavigateUrl=”~/Kullanici/albumlerim.aspx”></asp:MenuItem> <asp:MenuItem Text=”Bilgilerim” Value=”Bilgilerim” NavigateUrl=”~/Kullanici/bilgiler.aspx”></asp:MenuItem> </Items> <StaticHoverStyle BackColor=”#666666” ForeColor=”White” /> </asp:Menu> <br /> <fieldset style=”height: auto; width: auto”> <legend><font style=”font-size:smaller”>Üye Ara</font></legend> <asp:TextBox ID=”txtRumuz” runat=”server” Width=”125px”></ asp:TextBox><br /> &nbsp;<asp:Button ID=”btnAra” runat=”server” Text=”Ara” /><br /> <asp:HyperLink ID=”HyperLink1” runat=”server” FontSize=”Small” ForeColor=”Blue” NavigateUrl=”~/kullanici/detayliarama.aspx”>Detaylı Arama</asp:HyperLink><br /></fieldset> &nbsp;<br /> <br />.

(25) herkesburada.com. KullaniciSolMenu.ascx kontrolünde en üstte bir fieldset tanımlandı ve içerisine kullanıcının resimini gösterebilmek için Image kontrolü eklendi. Hemen altında karşılama mesajı olarak Hoşgeldiniz yazıldı ve LoginName kontrolü eklendi.. LoginName kontrolü oturum açan kullanıcının oturum adını almayı sağlar.. Orta bölümde kullanıcıların sayfalarda gezinmelerini sağlamak için Menu kontrolü eklendi ve gerekli sayfaları link verildi. En altta ise kullanıcıların site içerisinde arama yapmalarını sağlamak için arama bölümü yapıldı. Kullanıcı ilk oturum açtığında Profile bilgilerinden ProfilResmini belirtmemiş olacak. Eğer kendisi resim belirtmemiş ise otomatik olarak resimyok.jpg dosyası kullanıcının resmi yerine gösteriyoruz. Kullanıcı resimlerini depolomak için uygulama içerisine UyeResimleri klasörü ekleyin. Bu klasör sitedeki kullanıcıların resimlerini tutucak, dolayısıyla resimler daha düzenli tutulmuş olacak. Klasör içerisine resimyok.jpg resmini ekleyin. Bu resim profil bilgisini doldurmamış kullanıcının resminde gösterilecek. Bundan sonra oluşturulacak her sayfada bu menu kullanılacak. protected void Page_Load(object sender, EventArgs e) { if (String.IsNullOrEmpty(Profile.ProfilResmi)) imgUser.ImageUrl = Server.MapPath(“~/UyeResimleri/ resimyok.jpg”); else imgUser.ImageUrl = Server.MapPath(“~/UyeResimleri/”) + Profile.ProfilResmi; } Liste 1.17: Default.aspx Page_Load olayı.. Eklenen her sayfayı herkesburada.master sayfasından türetin.. Kullanıcı klasörüne default.aspx isminde bir Web Form ekleyin. Oluşan sayfanın kullanıcıya hoş görünebilmesi için Content’i tasarımsal olarak ikiye bölün, yani div kullanarak şekillendirin. Solda oluşan div içerisine biraz önce oluşturduğunuz KullaniciSolMenu.ascx kontrolünü ekleyin. <%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”Kullanici_Default” Title=”Üye Ana Sayfa” %> <%@ Register Src=”../Controls/KullaniciSolMenu.ascx” TagName=”Kul laniciSolMenu” TagPrefix=”uc1” %> <asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <div class=”SolMenu”> <uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server” /> </div> <div class=”KullaniciIcerik”> </div> </asp:Content> Liste 1.18: Default.aspx sayfası html tasarımı.. 21.

(26) 22. Proje 1. Bundan sonraki her sayfada aynı taslağı kullanın. Eklenen her sayfayı Liste 1.18‘de belirtidiği gibi 2 parçaya bölün ve sol tarafa KullaniciMenu.ascx kontrolünü ekleyin.. Şekil 1.18: Kullanici/default.aspx sayfa tasarım görüntüsü. Default.aspx sayfasının en üstünde belirtilen declaration haricindeki tüm kodları koplayalıp yapıştırabilirsiniz.. Kullanici klasörü içerisine Mesajlarim.aspx isminde bir Web Form Ekleyin. Kullanıcının gelen ve giden mesajlarının listeleneceği sayfası olacak. Sayfayı default.aspx’teki gibi iki div içerisine bölün.. <%@ Register Assembly=”AjaxControlToolkit” Namespace=”AjaxControl Toolkit” TagPrefix=”cc1” %> <%@ Register Src=”~/Controls/KullaniciSolMenu.ascx” TagName=”Kull aniciSolMenu” TagPrefix=”uc1” %> <asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <div class=”SolMenu”> <uc1:KullaniciSolMenu ID=”KullaniciSolMenu1” runat=”server” /> </div> <script language=”javascript” type=”text/javascript”> function YeniMesajGoster() { window.open(‘yenimesaj.aspx’,’yenimesaj’,’width=350,h eight=250’); } </script>.

(27) herkesburada.com. <div class=”KullaniciIcerik”> <br /> <asp:LinkButton ID=”lnkYeniMesaj” OnClientClick=”YeniMe sajGoster(); return false;” runat=”server” ForeColor=”Blue” Width=”67px”>Yeni Mesaj</asp:LinkButton><br /> <asp:UpdatePanel ID=”UpdatePanel1” runat=”server”> <ContentTemplate> <br /> <cc1:TabContainer ID=”TabContainer1” runat=”server” ActiveTabIndex=”0” Width=”625px”> <cc1:TabPanel ID=”TabPanel1” runat=”server” HeaderText=”TabPanel1”> <ContentTemplate> <asp:GridView ID=”gelenMesajlar” runat=”server” AllowPaging=”True” AllowSorting=”True” AutoGenerateColumns=”False” BackColor=”White” BorderColor=”#CCCCCC” BorderStyle=”None” BorderWidth=”1px” CellPadding=”4” DataKeyNames=”M esajId,OkunduMu” DataSourceID=”SqlDataSource1” EmptyDataText=”Gelen Mesajınız bulunmuyor...” ForeColor=”Black” GridLines=”Horizontal” Width=”100%” OnRowDeleting=”gelenMesajlar_ RowDeleting” OnRowDataBound=”gelenMesajlar_RowDataBound”> <FooterStyle BackColor=”#CCCC99” ForeColor=”Black” /> <Columns> <asp:HyperLinkField DataNavigateUrlFields=” UserName” DataNavigateUrlFormatString=”~/kullanici/profildetay. aspx?user={0}” DataTextField=”UserName” HeaderText=”G&#2 46;nderen” /> <asp:HyperLinkField DataNavigateUrlFields =”MesajId” DataNavigateUrlFormatString=”~/kullanici/mesajoku. aspx?mesaj={0}” DataTextField=”Baslik” HeaderText=”Konu” /> <asp:BoundField DataField=”Tarih” DataFormatString=”{0:d}” HeaderText=”Tarih” HtmlEncode=”False” SortExpression=”Tarih” /> <asp:TemplateField ShowHeader=”False”> <ItemTemplate> <asp:LinkButton ID=”LinkButton1” OnClientClick=”return confirm(‘Mesajı silmek istediğinizden emin misiniz?’)” runat=”server” CausesValidation=”False” CommandName=”Delete” Text=”Sil”></asp:LinkButton> </ItemTemplate> </asp:TemplateField>. 23.

(28) 24. Proje 1. </Columns> <SelectedRowStyle BackColor=”#CC3333” FontBold=”True” ForeColor=”White” /> <PagerStyle BackColor=”White” ForeColor=”Black” HorizontalAlign=”Right” /> <HeaderStyle BackColor=”#333333” Font-Bold=”True” ForeColor=”White” /> </asp:GridView> </ContentTemplate> <HeaderTemplate> Gelen Mesajlarım </HeaderTemplate> </cc1:TabPanel> <cc1:TabPanel ID=”TabPanel2” runat=”server” HeaderText=”TabPanel2”> <ContentTemplate> <asp:GridView ID=”gidenMesajlar” runat=”server” AllowPaging=”True” AllowSorting=”True” AutoGenerateColumns=”False” BackColor=”White” BorderColor=”#CCCCCC” BorderStyle=”None” BorderWidth=”1px” CellPadding=”4” DataKeyNames=”MesajId” DataSourceID=”SqlDataSource2” EmptyDataText=”Giden mesajınız bulunmuyor...” ForeColor=”Black” GridLines=”Horizontal” OnRowDeleting=”gidenMesajlar_ RowDeleting” Width=”100%”> <FooterStyle BackColor=”#CCCC99” ForeColor=”Black” /> <Columns> <asp:BoundField DataField=”UserName” HeaderText=”Kime” SortExpression=”Kimden” /> <asp:BoundField DataField=”Baslik” HeaderText=”Başlık” SortExpression=”Baslik” /> <asp:BoundField DataField=”Tarih” DataFormatString=”{0:d}” HeaderText=”Tarih” HtmlEncode=”False” SortExpression=”Tarih” /> <asp:TemplateField ShowHeader=”False”> <ItemTemplate> <asp:LinkButton ID=”LinkButton1” runat=”server” CausesValidation=”False” CommandName=”Delete” OnClientClick=”return confirm(‘Mesajı silmek istediğinden emin misiniz?’)” Text=”Sil”></ asp:LinkButton> </ItemTemplate> </asp:TemplateField>.

(29) herkesburada.com. </Columns> <SelectedRowStyle BackColor=”#CC3333” Font-Bold=”True” ForeColor=”White” /> <PagerStyle BackColor=”White” ForeColor=”Black” HorizontalAlign=”Right” /> <HeaderStyle BackColor=”#333333” Font-Bold=”True” ForeColor=”White” /> </asp:GridView> <asp:SqlDataSource ID=”SqlDataSource2” runat=”server” ConflictDetection=”CompareAllValues” ConnectionString=”<%$ ConnectionStrings:ConStrHerkesBurada %>” DeleteCommand=”DELETE FROM [Mesajlar] WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @ original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_Tarih “ InsertCommand=”INSERT INTO [Mesajlar] ([MesajId], [Kimden], [Kime], [Baslik], [MesajIcerik], [Tarih], [OkunduMu]) VALUES (@MesajId, @Kimden, @Kime, @Baslik, @ MesajIcerik, @Tarih)” OldValuesParameterFormatString=”orig inal_{0}” SelectCommand=”SELECT [MesajId], [UserName], [Baslik], [MesajIcerik], [Tarih] &#13;&#10;FROM [Mesajlar] m &#13;&#10;Inner Join aspnet_Users a on a.UserId = m.Kime&#13;&#10;WHERE ([Kimden] = @Kimden And GondericiyeGosterme=’False’) ORDER BY [Tarih]” UpdateCommand=”UPDATE [Mesajlar] SET [Kimden] = @Kimden, [Kime] = @Kime, [Baslik] = @Baslik, [MesajIcerik] = @MesajIcerik, [Tarih] = @Tarih WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @ original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_Tarih”> <InsertParameters> <asp:Parameter Name=”MesajId” Type=”Object” /> <asp:Parameter Name=”Kimden” Type=”Object” /> <asp:Parameter Name=”Kime” Type=”Object” /> <asp:Parameter Name=”Baslik” Type=”String” /> <asp:Parameter Name=”MesajIcerik” Type=”String” /> <asp:Parameter Name=”Tarih” Type=”DateTime” /> </InsertParameters> <SelectParameters> <asp:SessionParameter Name=”Kimden” SessionField=”UserId” /> </SelectParameters>. 25.

(30) 26. Proje 1. <UpdateParameters> <asp:Parameter Name=”Kimden” Type=”Object” /> <asp:Parameter Name=”Kime” Type=”Object” /> <asp:Parameter Name=”Baslik” Type=”String” /> <asp:Parameter Name=”MesajIcerik” Type=”String” /> <asp:Parameter Name=”Tarih” Type=”DateTime” /> <asp:Parameter Name=”OkunduMu” Type=”Boolean” /> <asp:Parameter Name=”original_ MesajId” Type=”Object” /> <asp:Parameter Name=”original_ Kimden” Type=”Object” /> <asp:Parameter Name=”original_ Kime” Type=”Object” /> <asp:Parameter Name=”original_ Baslik” Type=”String” /> <asp:Parameter Name=”original_ MesajIcerik” Type=”String” /> <asp:Parameter Name=”original_ Tarih” Type=”DateTime” /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name=”original_ MesajId” Type=”Object” /> <asp:Parameter Name=”original_ Kimden” Type=”Object” /> <asp:Parameter Name=”original_ Kime” Type=”Object” /> <asp:Parameter Name=”original_ Baslik” Type=”String” /> <asp:Parameter Name=”original_ MesajIcerik” Type=”String” /> <asp:Parameter Name=”original_ Tarih” Type=”DateTime” /> </DeleteParameters> </asp:SqlDataSource> </ContentTemplate> <HeaderTemplate> Giden Mesajlarım </HeaderTemplate> </cc1:TabPanel> </cc1:TabContainer><br />.

(31) herkesburada.com. <asp:SqlDataSource ID=”SqlDataSource1” runat=”server” ConflictDetection=”CompareAllValues” ConnectionString=”<%$ ConnectionStrings: ConStrHerkesBurada %>” DeleteCommand=”DELETE FROM [Mesajlar] WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_MesajIcerik AND [Tarih] = @original_ Tarih “ InsertCommand=”INSERT INTO [Mesajlar] ([MesajId], [Kimden], [Kime], [Baslik], [MesajIcerik], [Tarih]) VALUES (@ MesajId, @Kimden, @Kime, @Baslik, @MesajIcerik, @Tarih)” OldValuesParameterFormatString=”origi nal_{0}” SelectCommand=”SELECT [MesajId], [UserName], [Baslik], [MesajIcerik], [Tarih] ,OkunduMu&#13;&#10;FROM [Mesajlar] m &#13;&#10;Inner Join aspnet_Users a on a.UserId = m.Kimden&#13;&#10;WHERE ([Kime] = @Kime And AliciyaGosterme=’False’) ORDER BY OkunduMu,[Tarih] &#13;&#10;” UpdateCommand=”UPDATE [Mesajlar] SET [Kimden] = @Kimden, [Kime] = @Kime, [Baslik] = @Baslik, [MesajIcerik] = @ MesajIcerik, [Tarih] = @Tarih WHERE [MesajId] = @original_MesajId AND [Kimden] = @original_Kimden AND [Kime] = @original_Kime AND [Baslik] = @original_Baslik AND [MesajIcerik] = @original_ MesajIcerik AND [Tarih] = @original_Tarih AND [OkunduMu] = @ original_OkunduMu”> <DeleteParameters> <asp:Parameter Name=”original_MesajId” Type=”Object” /> <asp:Parameter Name=”original_Kimden” Type=”Object” /> <asp:Parameter Name=”original_Kime” Type=”Object” /> <asp:Parameter Name=”original_Baslik” Type=”String” /> <asp:Parameter Name=”original_MesajIcerik” Type=”String” /> <asp:Parameter Name=”original_Tarih” Type=”DateTime” /> </DeleteParameters> <UpdateParameters> <asp:Parameter Name=”Kimden” Type=”Object” /> <asp:Parameter Name=”Kime” Type=”Object” /> <asp:Parameter Name=”Baslik” Type=”String” /> <asp:Parameter Name=”MesajIcerik” Type=”String” /> <asp:Parameter Name=”Tarih” Type=”DateTime” />. 27.

(32) 28. Proje 1. <asp:Parameter Name=”original_MesajId” Type=”Object” /> <asp:Parameter Name=”original_Kimden” Type=”Object” /> <asp:Parameter Name=”original_Kime” Type=”Object” /> <asp:Parameter Name=”original_Baslik” Type=”String” /> <asp:Parameter Name=”original_MesajIcerik” Type=”String” /> <asp:Parameter Name=”original_Tarih” Type=”DateTime” /> <asp:Parameter Name=”original_OkunduMu” /> </UpdateParameters> <SelectParameters> <asp:SessionParameter Name=”Kime” SessionField=”UserId” Type=”Object” /> </SelectParameters> <InsertParameters> <asp:Parameter Name=”MesajId” Type=”Object” /> <asp:Parameter Name=”Kimden” Type=”Object” /> <asp:Parameter Name=”Kime” Type=”Object” /> <asp:Parameter Name=”Baslik” Type=”String” /> <asp:Parameter Name=”MesajIcerik” Type=”String” /> <asp:Parameter Name=”Tarih” Type=”DateTime” /> </InsertParameters> </asp:SqlDataSource> </ContentTemplate> </asp:UpdatePanel> &nbsp;&nbsp;<br /> <br /> </div> </asp:Content> Liste 1.19: Mesajlarim.aspx html tasarımı. Eklenen bu formun en üst kısmında bir link button kontrolü bulunur. Bu link butonuna tıklandığı zaman yeni bir pencerede popup olarak yeni mesaj gönderme sayfası açılacak. Bu link’in hemen altında bir update panel bulunur. Update panel içerisinde Tab Container kontrolü bulunur. Tab Container kontrolü içerisinde 2 adet tab oluşturuldu ve bu tab’lardan birinde gelen mesajlar, diğerinde ise giden mesajlar listelendi. Gelen mesaj eğer okunmamış ise mesajın bulunduğu satırın stili değiştirilecek. Bunun için gelenMesajlar grid view kontrolünün RowDataBound olayında mesajın okunup okunmadığı bilgisini alıp gerekli değişikliği yapın..

(33) herkesburada.com. protected void gelenMesajlar_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType != DataControlRowType.DataRow) return; bool neymis = Convert.ToBoolean(gelenMesajlar.DataKeys[e. Row.RowIndex][“OkunduMu”]) ; if (!neymis) { e.Row.BackColor = Color.Brown; e.Row.ForeColor = Color.White; } } Liste 1.20: Mesajlarim.aspx gelenMesajlar RowDataBound olayı. Giden ve gelen mesajlarda silinme işleminde değişik bir sistem kullanılır. Bir mesaj geldiği zaman veritabanında tek bir satıra kayıt girilecek. Mesajı gönderen kişi gelen mesajlarından mesajı sil dediği zaman aslında bana gösterme demiş olacak. Mesaj gelen kişi gelen mesajı sil dediği zaman aslında bana gösterme demiş olacak. Eğer mesaj gerçekten silinirse gönderen veya alan kişi mesajı sildiği zaman diğer kişi mesajı görememiş olacak. O yüzden bir kullanıcı mesajı sil dediği zaman aslında o kullanıcıya mesajın gösterilip gösterilmeyeceği belirtilecek. Bu yüzden gelen ve giden mesajlar için silinme olayında gerekli mesajları güncelleyin. protected void gelenMesajlar_RowDeleting(object sender, GridViewDeleteEventArgs e) { Guid mesajId = new Guid(gelenMesajlar.DataKeys[e. RowIndex].Value.ToString()); SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString); SqlCommand cmd = new SqlCommand(“Update mesajlar set AliciyaGosterme = ‘True’ Where MesajId = @MesajId”, con); cmd.Parameters.AddWithValue(“@MesajId”, mesajId); try { con.Open(); cmd.ExecuteNonQuery(); } catch (SqlException ex) { throw ex; } finally. 29.

(34) 30. Proje 1. { con.Close(); } SqlDataSource1.DataBind(); } protected void gidenMesajlar_RowDeleting(object sender, GridViewDeleteEventArgs e) { Guid mesajId = new Guid(gidenMesajlar.DataKeys[e. RowIndex].Value.ToString()); SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString); SqlCommand cmd = new SqlCommand(“Update mesajlar set GondericiyeGosterme = ‘True’ Where MesajId = @MesajId”, con); cmd.Parameters.AddWithValue(“@MesajId”, mesajId); try { con.Open(); cmd.ExecuteNonQuery(); } catch (SqlException ex) { throw ex; } finally { con.Close(); } SqlDataSource2.DataBind(); } Liste 1.21: Mesajlarim.aspx gelen ve giden mesajların silinme olayı. Mesajı alan kişi ve gönderen kişi birlikte silinme istediğinde bulunursa mesaj gerçekten veritabanından silinir. Bu yüzden veritabanı üzerine bu işlemi yapacak trigger’ı oluşturun. Liste 1.22’de belirtilmiştir. USE herkesburadadb GO CREATE TRIGGER MesajSilici ON Mesajlar For Update.

(35) herkesburada.com. AS BEGIN. Declare @MesajId uniqueidentifier Select @MesajId = MesajId From Inserted Delete From Mesajlar Where GondericiyeGosterme = ‘True’ And AliciyaGosterme=’True’ And MesajId = @MesajId END Liste 1.22: MesajSilici trigger kodu. Mesajlarim.aspx sayfası tasarımı Şekil 1.19’da belirtilmiştir.. Şekil 1.19: Mesajlarim.aspx sayfa tasarım görünümü.. Yeni mesaj gönderebilmek için Kullanici klasörü içerisine yenimesaj.aspx isimli bir sayfa ekleyin fakat bu sayfayı eklerken master page seçmeyin. <%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”yenimesaj. aspx.cs” Inherits=”Kullanici_yenimesaj” %> <%@ Register Assembly=”AjaxControlToolkit” Namespace=”AjaxControl Toolkit” TagPrefix=”cc1” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” > <head runat=”server”> <title>Yeni Mesaj Gönder</title>. 31.

(36) 32. Proje 1. <link href=”../Style/Genel.css” rel=”stylesheet” type=”text/ css” /> </head> <body style=”margin-left:0;margin-top:0”> <form id=”form1” runat=”server”> <div style=”text-align:left”> <table width=”300”> <tr> <td style=”width: 55px”> </td> <td colspan=”2”> <asp:ScriptManager ID=”ScriptManager1” runat=”server”> </asp:ScriptManager> <cc1:AutoCompleteExtender EnableCaching=”false” id=”AutoCompleteExtender1” MinimumPrefixLength=”2” runat=”server” servicemethod=”GetCompletionList” targetcontrolid=”txtKime” UseContextKey=”true” ></cc1: AutoCompleteExtender> </td> <td style=”width: 100px”> </td> </tr> <tr> <td style=”width: 55px”> Kime : </td> <td style=”width: 69px”> <asp:TextBox ID=”txtKime” runat=”server”></ asp:TextBox></td> <td style=”width: 69px”> </td> <td style=”width: 100px”> </td> </tr> <tr> <td style=”width: 55px”> Konu : </td> <td colspan=”3”>.

(37) herkesburada.com. <asp:TextBox ID=”txtBaslik” runat=”server” Width=”100%”></asp:TextBox></td> </tr> <tr> <td style=”width: 55px; height: 18px” valign=”top”> Mesaj : </td> <td colspan=”3” style=”height: 18px”> <asp:TextBox ID=”txtMesaj” runat=”server” Height=”107px” TextMode=”MultiLine” Width=”100%”></asp:TextBox></ td> </tr> <tr> <td style=”width: 55px”> </td> <td style=”width: 69px”> <asp:Button ID=”btnGonder” runat=”server” Text=”Gönder” OnClick=”btnGonder_Click” /> </td> <td style=”width: 69px”> <asp:Button ID=”btnIptal” runat=”server” Text=”İptal” CausesValidation=”False” OnClientClick=”javascript: window.close();” /></td> <td style=”width: 100px”> </td> </tr> <tr> <td style=”width: 55px; height: 18px”> </td> <td style=”width: 69px; height: 18px”> &nbsp;</td> <td style=”width: 69px; height: 18px”> </td> <td style=”width: 100px; height: 18px”> </td> </tr> </table> </div> </form> </body> </html> Liste 1.23: Yenimesaj.aspx.. 33.

(38) 34. Proje 1. Yeni mesaj göndermek için sayfaya bir scriptmanager ve bir autocompleteextender konrolü eklendi. Eğer mesaj gönderilecek kişi kullanıcının arkadaşı ise otomatik olarak textbox altında çıkacak. Kullanıcı mesajı gidecek kişinin ismini yazdığı zaman tamamlama olmayacak. Mesaj gönderilecek kişi, mesajı gönderen kişinin arkadaşı olup olmadığını öğrenebilmesi için veritabanı üzerinde ArkadasListem isminde bir stored procedure oluşturun. Arkadaş listesi tek bir tabloda tanımlanıyor. CREATE proc [ArkadasListem] ( @UserId uniqueidentifier ) As SELECT aspnet_Users.UserName , Kimin As KullaniciId FROM ArkadasListesi INNER JOIN aspnet_Users ON ArkadasListesi.Kimin = aspnet_Users.UserId WHERE ArkadasListesi.OnaylandiMi = ‘True’ And (ArkadasListesi.Kim = @UserId) Union SELECT aspnet_Users.UserName, Kim As KullaniciId FROM ArkadasListesi INNER JOIN aspnet_Users ON ArkadasListesi.Kim = aspnet_Users.UserId WHERE ArkadasListesi. OnaylandiMi = ‘True’ And (ArkadasListesi.Kimin = @UserId) Liste 1.24: ArkadasListem StoredProcedure’ü. Mesaj gönderileceği zaman mesajı gönderecek kişi, alacak mesajı göndereceği kişinin adını yazar. Veritabanı ise bir mesajı kaydedebilmesi için kullanıcının ID bilgisine ihtiyaç duyacaktır. Veritabanı üzerinde kullanıcının adını parametre olarak alan ve ID’sini döndüren function’ı yazın. (Liste 1.25) CREATE function KullaniciIdAl ( @UserName nvarchar(50) ) returns uniqueidentifier As begin Declare @userId uniqueidentifier Select @UserId =UserId From aspnet_Users Where [UserName] = @ username return @userId end Liste 1.25: KullanıcıIdAl function tanımlaması..

(39) herkesburada.com. Yenimesaj.aspx sayfasına geri dönüp arkadaş listesini döndürecek metodu tanımlayın. public static List<string> uyeler = new List<string>(); [System.Web.Services.WebMethodAttribute(), System.Web.Script. Services.ScriptMethodAttribute()] public static string[] GetCompletionList(string prefixText, int count, string contextKey) { SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString); SqlCommand cmd = new SqlCommand(“ArkadasListem”,con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue(“@UserId”, Membership. GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey); SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); uyeler.Clear(); foreach (DataRow dr in dt.Rows) { if (dr[“UserName”].ToString().StartsWith(prefixText)) uyeler.Add(dr[“UserName”].ToString()); } return uyeler.ToArray(); } Liste 1.26: Kullanıcının arkadaş listesini otomatik dolduran metod. Arkadaş listesini doldurduktan sonra yeni mesaj göndermek için btnGonder button kontrolünün Click olayında yeni mesaj gönderme kodlarını yazın. protected void btnGonder_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(ConfigurationManage r.ConnectionStrings[“LocalSqlServer”].ConnectionString); SqlCommand cmd = new SqlCommand(“Insert into mesajla r(Kimden,Kime,MesajIcerik,Baslik,Tarih) values(@Kimden,dbo. KullaniciIdAl(@Kime),@MesajIcerik,@Baslik,@Tarih)”, con); cmd.Parameters.AddWithValue(“@Kimden”,Membership. GetUser(User.Identity.Name).ProviderUserKey); cmd.Parameters.AddWithValue(“@Kime”,txtKime.Text); cmd.Parameters.AddWithValue(“@MesajIcerik”,txtMesaj. Text); cmd.Parameters.AddWithValue(“@Baslik”,txtBaslik.Text); cmd.Parameters.AddWithValue(“@Tarih”,DateTime.Now );. 35.

(40) 36. Proje 1. int i = 0; try { con.Open(); i = cmd.ExecuteNonQuery(); } catch (SqlException ex) { throw ex; } finally { con.Close(); } if (i == 1) { Response.Redirect(“~/kullanici/mesajgonderildi. aspx”); } } Liste 1.27: btnGonder button kontrolü Click olayı.. Şekil 1.20: YeniMesaj.aspx sayfa tasarım görünümü.. Mesaj gönderildikten sonra kullanıcıya mesajın gittiğine dair mesajı gönderilecek ve tekrar mesaj göndermek isteyip istemediğini sorulacak mesajgonderildi.aspx sayfasını Kullanici klasörüne ekleyin ve master page seçtirmeyin. <%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”mesajgond erildi.aspx.cs” Inherits=”Kullanici_mesajgonderildi” %> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” > <head runat=”server”>.

(41) herkesburada.com. <title>Mesaj Gönderildi</title> <link href=”~/Style/Genel.css” rel=”stylesheet” type=”text/ css” /> </head> <body> <form id=”form1” runat=”server”> <div> <br /> <asp:Label ID=”Label1” runat=”server” Font-Size=”Medium” ForeColor=”Red” Text=”Mesajınız Gönderildi...”></asp:Label><br /> <br /> <asp:LinkButton ID=”LinkButton1” runat=”server” OnClick=”lnkYeniMesaj_Click”>Yeni Mesaj</asp:LinkButton> <asp:HyperLink ID=”HyperLink1” runat=”server” NavigateUrl=”javascript:window.close();”>Kapat</asp:HyperLink></ div> </form> </body> </html> Liste 1.28: Mesajgonderildi.aspx sayfası html tasarımı. Yeni Mesaj button kontrolünün Click olayında yenimesaj.aspx sayfasına yönlendirme yapın. protected void lnkYeniMesaj_Click(object sender, EventArgs e) { Response.Redirect(“~/kullanici/yenimesaj.aspx”); } Liste 1.29: lnkYeniMesaj button kontrol Click olayı.. Bu aşamadan sonra eklenen tüm sayfaları herkesburada.master sayfasından türetin ve default.aspx sayfasındaki şekilde sol ve sağ taraf olacak şekilde bölün. Şekil 1.21: MesajGonderildi. aspx tasarım görünümü.. Mesaj gönderme ve gelen/giden mesajları görüntüleme tamamlandıktan sonra mesajoku.aspx sayfasını Kullanici klasörüne ekleyin. <%@ Page Language=”C#” MasterPageFile=”~/herkesburada. master” AutoEventWireup=”true” CodeFile=”mesajoku.aspx.cs” Inherits=”Kullanici_mesajoku” Title=”Untitled Page” %> <%@ Register Src=”../Controls/KullaniciSolMenu.ascx” TagName=”Kul laniciSolMenu” TagPrefix=”uc1” %> <asp:Content ID=”Content1” ContentPlaceHolderID=”AnaIcerik” Runat=”Server”> <div class=”SolMenu”>. 37.

Gambar

Şekil 1.13: herkesburada.master sayfa tasarımı.
Şekil 1.17: Default.aspx sayfa tasarım görünümü.
Şekil 1.18: Kullanici/default.aspx sayfa tasarım görüntüsü.
Şekil 1.19: Mesajlarim.aspx sayfa tasarım görünümü.
+7

Referensi

Dokumen terkait

Apabila belum terjadi drainase spontan, maka perawatan abses vestibular adalah insisi dan drainase pada puncak fluktuasi dan drainase dipertahankan dengan pemasangan drain (drain

Oleh karena budaya bangsa kita sebagian besar masih berdasarkan budaya etnik tradisional, sedangkan iptek   berasal dari perkembangan budaya asing yang lebih maju, maka

Pertimbangan Hakim dalam memeriksa dan memutus kasasi penuntut umum terhadap putusan Pengadlan Tinggi Banjarmasin dalam perkara penggelapan dalam jabatan sudah sesuai dengan

PERUBAHAN ATAS PERATURAN BUPATI NOMOR 52 TAHUN 2018 TENTANG PEDOMAN PENYELENGGARAAN POLA PENGELOLAAN KEUANGAN BADAN LAYANAN UMUM DAERAH UNIT PELAKSANA TEKNIS DINAS

Hal tersebut berdasarkan pengamatan pada perlakuan sistem sadap S/2 d2 kelima klon tersebut memiliki potensi produksi yang lebih tinggi dibanding rata-rata potensi

Penelitian ini bertujuan untuk (1) mengetahui subjective norm yang dimiliki remaja putra di SMA Negeri 1 Tuban dalam berperilaku tidak merokok, (2) mengetahui perceived

(3) Baku mutu air limbah bagi usaha dan/atau kegiatan sebagaimana dimaksud pada ayat (1) tercantum dalam Lampiran I sampai dengan Lampiran XLVI yang merupakan bagian tidak

1. Tahun 1952 berdasarkan Surat Keputusan Dewan Perwakilan Kota Sementara Djakarta Raja Nomor. 18/DK/tanggal 11 september 1952, maka dibentuklah Suku Bagian Padjak pada