summaryrefslogtreecommitdiff
path: root/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page
diff options
context:
space:
mode:
authorkabayan <>2007-08-29 11:55:06 +0000
committerkabayan <>2007-08-29 11:55:06 +0000
commit30795649ead5b7212cad32f9d5a9ca6152beba27 (patch)
treed2cb2e60736d967d55bb7b8ef23de1149f31ae3f /demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page
parent91536b68a8eee2e2849949f605d3e5428f71cd9c (diff)
Indonesian Blog tutorial day 3,4, and 5 3rd tries
Diffstat (limited to 'demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page')
-rw-r--r--demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page210
1 files changed, 210 insertions, 0 deletions
diff --git a/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page b/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page
new file mode 100644
index 00000000..905f7489
--- /dev/null
+++ b/demos/blog-tutorial/protected/pages/Day3/id/CreateNewUser.page
@@ -0,0 +1,210 @@
+<com:TContent ID="Main">
+
+<h1>Membuat Halaman <tt>NewUser</tt></h1>
+
+<p>
+Halaman <tt>NewUser</tt> disediakan untuk pengguna administrator guna membuat akun pengguna baru. Ini perlu menampilkan sebuah formulir yang mengumpulkan informasi mengenai akun pengguna baru. Berdasarkan <a href="?page=Day2.CreateDB">definisi database</a>, kita akan perlu mengumpulkan informasi berikut:
+</p>
+
+<ul>
+<li><tt>username</tt> - string, diperlukan dan unik</li>
+<li><tt>email</tt> - string, diperlukan dan unik</li>
+<li><tt>password</tt> - string, diperlukan</li>
+<li><tt>role</tt> - integer, diperlukan (baik 0 ataupun 1)</li>
+<li><tt>first_name</tt> - string, opsional</li>
+<li><tt>last_name</tt> - string, opsional</li>
+</ul>
+
+<p>
+Kita membuat dua file <tt>protected/pages/users/NewUser.page</tt> dan <tt>protected/pages/users/NewUser.php</tt> masing-masing untuk menyimpan template halaman dan kelas halaman.
+</p>
+
+<h2>Membuat Template Halaman</h2>
+<p>
+Berdasarkan pada analisis di atas, kita menulis template halaman seperti berikut:
+</p>
+
+<com:TTextHighlighter CssClass="source" Language="prado">
+&lt;%@ Title="My Blog - New User" %>
+
+&lt;com:TContent ID="Main">
+
+<h1>Create New User</h1>
+
+<span>Username:</span>
+&lt;com:TRequiredFieldValidator
+ ControlToValidate="Username"
+ ErrorMessage="Please provide a username."
+ Display="Dynamic" />
+&lt;com:TCustomValidator
+ ControlToValidate="Username"
+ ErrorMessage="Sorry, your username is taken by someone else. Please choose another username."
+ OnServerValidate="checkUsername"
+ Display="Dynamic" />
+<br/>
+&lt;com:TTextBox ID="Username" />
+
+<br/>
+<span>Password:</span>
+&lt;com:TRequiredFieldValidator
+ ControlToValidate="Password"
+ ErrorMessage="Please provide a password."
+ Display="Dynamic" />
+<br/>
+&lt;com:TTextBox ID="Password" TextMode="Password" />
+
+<br/>
+<span>Re-type Password:</span>
+&lt;com:TCompareValidator
+ ControlToValidate="Password"
+ ControlToCompare="Password2"
+ ErrorMessage="Your password entries did not match."
+ Display="Dynamic" />
+<br/>
+&lt;com:TTextBox ID="Password2" TextMode="Password" />
+
+<br/>
+<span>Email Address:</span>
+&lt;com:TRequiredFieldValidator
+ ControlToValidate="Email"
+ ErrorMessage="Please provide your email address."
+ Display="Dynamic" />
+&lt;com:TEmailAddressValidator
+ ControlToValidate="Email"
+ ErrorMessage="You entered an invalid email address."
+ Display="Dynamic" />
+<br/>
+&lt;com:TTextBox ID="Email" />
+
+<br/>
+<span>Role:</span>
+<br/>
+&lt;com:TDropDownList ID="Role">
+ &lt;com:TListItem Text="Normal User" Value="0" />
+ &lt;com:TListItem Text="Administrator" Value="1" />
+&lt;/com:TDropDownList>
+
+<br/>
+<span>First Name:</span>
+<br/>
+&lt;com:TTextBox ID="FirstName" />
+
+<br/>
+<span>Last Name:</span>
+<br/>
+&lt;com:TTextBox ID="LastName" />
+
+<br/>
+&lt;com:TButton Text="Create" OnClick="createButtonClicked" />
+
+&lt;/com:TContent>
+</com:TTextHighlighter>
+
+<p>
+Template tidak jauh berbeda dari template <tt>Contact</tt> dan halaman <tt>LoginUser</tt>. Sebagian besar terdiri dari kotak teks dan validator. Beberapa kotak teks, seperti nama pengguna, dikaitkan dengan dua validator karena keterlibatan aturan multipel validasi.
+</p>
+
+
+<h2>Membuat Kelas Halaman</h2>
+
+<p>
+Dari template halaman di atas, kita melihat bahwa kita perlu untuk menulis sebuah kelas halaman yang mengimplementasikan dua pengendali event: <tt>checkUsername()</tt> (disertakan ke event validator kustom <tt>OnServerValidate</tt>) dan <tt>createButtonClicked()</tt> (disertakan ke event tombol "create" <tt>OnClick</tt>). Oleh karena itu, kita menulis kelas halaman seperti berikut:
+</p>
+
+<com:TTextHighlighter CssClass="source" Language="php">
+class NewUser extends TPage
+{
+ /**
+ * Memeriksa apakah nama pengguna sudah ada dalam database.
+ * Metode ini merespon ke event OnServerValidate pada validator kustom nama pengguna.
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function checkUsername($sender,$param)
+ {
+ // benar jika nama pengguna tidak ditemukan dalam database
+ $param->IsValid=UserRecord::finder()->findByPk($this->Username->Text)===null;
+ }
+
+ /**
+ * Membuat akun pengguna baru jika semua input benar.
+ * Metode ini merespon ke event OnClick pada tombol "create".
+ * @param mixed event sender
+ * @param mixed event parameter
+ */
+ public function createButtonClicked($sender,$param)
+ {
+ if($this->IsValid) // ketika semua validasi sukses
+ {
+ // populasikan obyek UserRecord dengan input pengguna
+ $userRecord=new UserRecord;
+ $userRecord->username=$this->Username->Text;
+ $userRecord->password=$this->Password->Text;
+ $userRecord->email=$this->Email->Text;
+ $userRecord->role=(int)$this->Role->SelectedValue;
+ $userRecord->first_name=$this->FirstName->Text;
+ $userRecord->last_name=$this->LastName->Text;
+
+ // simpan database melalui mekanisme Rekaman Aktif
+ $userRecord->save();
+
+ // alihkan browser ke homepage
+ $this->Response->redirect($this->Service->DefaultPageUrl);
+ }
+ }
+}
+</com:TTextHighlighter>
+
+<p>
+Dalam kode di atas, memanggil <tt>save()</tt> akan menyisipkan baris baru dalam tabel <tt>users</tt>. Fitur intuitif ini dihidupkan oleh <a href="http://www.pradosoft.com/demos/quickstart/?page=Database.ActiveRecord">Rekaman Aktif</a>.
+</p>
+
+<com:NoteBox>
+Untuk memudahkan, nama pengguna dalam sistem blg kita adalah tidak sensitif-huruf! Dalam banyak sistem praktis, nama pengguna mungkin perlu sensitif-huruf. Maka penanganan khusus perlu dibuat saat pembuatan akun pengguna baru dan juga <a href="?page=Day3.Auth">melakukan otentikasi</a>. Juga, ruang kosong dalam nama pengguna perlu dipotong ketika membuat akun baru dengan itu.
+</com:NoteBox>
+
+
+<h2>Pengujian</h2>
+<p>
+Untuk menguji halaman <tt>NewUser</tt>, kunjungi URL <tt>http://hostname/blog/index.php?page=users.NewUser</tt>. Kita akan melihat output halaman berikut. Coba masukan informasi berbeda ke dalam formulir dan lihat bagaimana input divalidasi. Jika semua aturan validasi memuaskan, kita akan mengharapkan akun pengguna dibuat dan browser dialihkan ke homepage.
+</p>
+
+<img src="<%~ output2.gif %>" class="output"/>
+
+
+<h2>Menambahkan Pemeriksaan Perijinan</h2>
+<p>
+Selama pengujian, anda mungkin bertanya: apakah halaman <tt>NewUser</tt> seharusnya hanya bisa diakses oleh pengguna administrator? Ya, ini disebut <a href="http://www.pradosoft.com/demos/quickstart/?page=Advanced.Auth">otorisasi</a>. Sekarang kami menjelaskan bagaimana kita menambahkan pemeriksaan perijinan ini ke halaman <tt>NewUser</tt>.
+</p>
+
+<p>
+Cara langsung pada pemeriksaan perijinan adalah dalam kelas halaman di mana kita memeriksa apakah <tt>$this->User->IsAdmin</tt> adalah true, dan jika tidak, kita mengalihkan browser ke halaman <tt>LoginUser</tt>.
+</p>
+
+<p>
+PRADO menawarkan cara lebih sistematis terhadap pemeriksaan perijinan akses halaman. Untuk melakukannyaTo , kita perlu menggunakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Configurations.PageConfig">konfigurasi halaman</a>. Membuat sebuah file <tt>protected/pages/users/config.xml</tt> dengan konten seperti berikut:
+</p>
+
+<com:TTextHighlighter CssClass="source" Language="xml">
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <authorization>
+ <allow pages="NewUser" roles="admin" />
+ <deny users="?" />
+ </authorization>
+</configuration>
+</com:TTextHighlighter>
+
+<p>
+Konfigurasi halaman berisi aturan otorisasi yang berlaku untuk halaman di bawah direktori <tt>protected/pages/users</tt>. Konfigurasi di atas terbaca bahwa <tt>NewUser</tt> bisa diakses oleh para pengguna dengan aturan <tt>admin</tt> (lihat <a href="?page=Day3.Auth">BlogUser.createUser()</a> untuk alasan kenapa kata "admin"), dan menolak akses anonim (<tt>users="?"</tt> berarti pengguna tamu) untuk seluruh halaman di bawah direktori.
+</p>
+
+<p>
+Sekarang jika kita mengunjungi halaman <tt>NewUser</tt> sebagai seorang tamu, kita akan dialihkan ke halaman <tt>LoginUser</tt> terlebih dahulu. Jika kita masuk dengan sukses, kita akan mengalihkan kembali ke halaman<tt>NewUser</tt>.
+</p>
+
+<com:TipBox>
+Konfigurasi halaman dapat berisi lebih dari satu aturan otorisasi. Sebagai contoh, ia dapat menyertakan <a href="http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Modules">modul</a> seperti yang ktia lakukan dalam <a href="?page=Day2.ConnectDB">konfigurasi aplikasi</a>. Untuk aplikasi PRADO, setiap direktori halaman dapat mempunyai konfigurasi halaman yang berlaku bagi halaman dalam direktori yang sama dan seluruh subdirektorinya.
+</com:TipBox>
+
+</com:TContent> \ No newline at end of file