selalu belajar menjadi lebih bijaksana*
lagi dan lagi..

Membuat Upload dan Download File pada YII

Anyeong chingu :)
Sekarang saya akan membahas tentang bagaimana membuat upload file dalam format pdf pada surat masuk (tapi bisa juga untuk upload gambar, tinggal mengganti type-nya saja).

Step 1.
Masuk ke /protected/models/suratMasuk.php lalu ketik seperti di bawah ini.

public function rules()
{
   // NOTE: you should only define rules for those attributes that
   // will receive user inputs.
   return array(
       array('tgl_masuk, no_surat_masuk, perihal, lampiran, kepada, upload, dari, keterangan', 'required'),
       array('no_surat_masuk, perihal', 'length', 'max'=>30),
       array('lampiran', 'length', 'max'=>10),
       array('kepada, dari', 'length', 'max'=>40),
       array('upload', 'file', 'types'=>'pdf','maxSize'=>1024*1024*5, 'on'=>'insert'),
       // The following rule is used by search().
       // @todo Please remove those attributes that should not be searched.
       array('no, tgl_masuk, no_surat_masuk, perihal, lampiran, kepada, upload, dari, keterangan', 'safe', 'on'=>'search'),
    );
}

Nah yang perlu diperhatikan adalah “array('upload', 'file', 'types'=>'pdf','maxSize'=>1024*1024*5, 'on'=>'insert'),”   yang maksudnya field upload ini akan diisi oleh file dengan tipe pdf (kalo mau tipe png, jpg, gif juga bisa, tinggal diganti aja), dan ukuran maksimalnya adalah 5 Mb.

Untuk mengeset 5 Mb ini, kita perlu mengubah konfigurasinya di folder C:/xampp/php/php.ini
Ctrl + F lalu ketik ‘post_max_size’ nah disitu kita ganti menjadi ‘post_max_size = 5M’

Step 2.
Buka /protected/controllers/SuratMasukController.php dan masukkan source code berikut :

*pada actionCreate
public function actionCreate()
{
    $model=new SuratMasuk;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['SuratMasuk']))
    {
        $cekfile = $model->upload=CUploadedFile::getInstance($model,'upload');

        $model->attributes=$_POST['SuratMasuk'];
        $model->upload=CUploadedFile::getInstance($model,'upload');
        if($model->save())
        {
           if(!empty($cekfile))
           {
               $model->upload->saveAs(Yii::app()->basePath.'/../upload_file/'.$model->upload->getName());   
           }
        }             
        $this->redirect(array('view','id'=>$model->no));
    }

    $this->render('create',array(
              'model'=>$model,
              ));
}

Maksud code di atas, saat action create akan dicek dulu apakah field upload sudah terisi atau belum, jika belum maka gambar akan tersimpan pada field upload yaitu di folder ‘upload_file’ yang terletak di dalam folder aplikasi yii dan sejajar dengan folder protected.

*dan pada actionUpdate
public function actionUpdate($id)
                {
                                $model=$this->loadModel($id);
                                $image=$model->upload;

                                // Uncomment the following line if AJAX validation is needed
                                // $this->performAjaxValidation($model);

                                if(isset($_POST['SuratMasuk']))
                                {
                                                $cekfile = $model->upload=CUploadedFile::getInstance($model,'upload');

                                                //jika file tidak ada
                                                if (empty($cekfile))
                                                {
                                                                $model->attributes=$_POST['SuratMasuk'];
                                                                $model->upload = $image;

                                                                if($model->save())
                                                                {
                                                                                $this->redirect(array('view','id'=>$model->no));
                                                                }
                                                }

                                                else //jika file ada
                                                {
                                                                $model->attributes=$_POST['SuratMasuk'];
                                                                $model->upload=CUploadedFile::getInstance($model,'upload');             

                                                                if($model->save())
                                                                {
                                                                                $model->upload->saveAs(Yii::app()->basePath.'/../upload_file/'.$model->upload->getName());
                                                                                $this->redirect(array('view','id'=>$model->no));
                                                                }
                                                }
                                }

                                $this->render('update',array(
                                                'model'=>$model,
                                ));
                }

Step 3.
Sekarang kita buka /protected/views/suratMasuk/_form.php 
*perhatikan bagian ini ..
<?php $form=$this->beginWidget('CActiveForm', array(
                'id'=>'surat-masuk-form',
                'htmlOptions'=>array('enctype'=>'multipart/form-data'),
                // Please note: When you enable ajax validation, make sure the corresponding
                // controller action is handling ajax validation correctly.
                // There is a call to performAjaxValidation() commented in generated controller code.
                // See class documentation of CActiveForm for details on this.
                'enableAjaxValidation'=>false,
)); ?>

Yang harus ditambahkan adalah bagian ‘htmlOptions’. Selanjutnya tambahkan ini.

*ini digunakan untuk menampilkan gambar saat proses update, sehingga gambar yang sudah tersimpan di database akan ditampilkan
<?php if(!empty($model->upload)) { ?>
                <div class="row">
                                <?php echo CHtml::image(Yii::app()->request->baseUrl.'/upload_file/'.$model->upload.'','Surat Masuk',array('width'=>100)); ?>
                </div>
                <?php } ?>
<br>
//nah di sini perhatikan <?php yang kedua, sebelumnya adalah textField, di sini kita ganti menjadi fileField
                <div class="row">
                                <?php echo $form->labelEx($model,'upload'); ?>
                                <?php echo $form->fileField($model,'upload',array('size'=>60,'maxlength'=>255)); ?>
                                <?php echo $form->error($model,'upload'); ?>
                </div>

Nah perkara upload selesai, sekarang kita buat pasangannya yaitu download.
*ini untuk membuat download file di CgridView
<?php $this->widget('zii.widgets.grid.CGridView', array(
                'id'=>'surat-masuk-grid',
                'dataProvider'=>$model->search(),
                'filter'=>$model,
                'columns'=>array(
                                'no',
                                'tgl_masuk',
                                'no_surat_masuk',
                                'perihal',
                                'kepada',
                                array(
                                                'class'=>'CLinkColumn',
                                                'header'=>'File',
                                                'urlExpression'=>'Yii::app()->request->baseUrl."/upload_file/".$data->upload',
                                                'label'=>'Download',
                                                'linkHtmlOptions'=>array(      /*yang ini untuk membuat download new tab */
                                                                'target'=>'_blank',
                                                ),
                                ),
                                array(
                                                'class'=>'CButtonColumn',
                                ),
                ),
)); ?>

*ini untuk menampilkan hasil upload pada view
<center>
<?php
                echo "<br>";
                echo CHtml::image(Yii::app()->request->baseUrl.'/upload_file/'.$model->upload.'','Surat Masuk',array('width'=>600));
?>
</center>

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Membuat Captcha pada Login Form

Anyeong chingu :)
Kali ini saya akan sharing bagaimana membuat captcha pada Form Login.

Step 1.
Kita buat di controllernya yaitu di /protected/controllers/SiteController.php

public function accessRules()
                {
                                return array(
                                                array('allow',  // allow all users to perform 'index' and 'view' actions
                                                                'actions'=>array('captcha'),
                                                                'users'=>array('@'),
                                                ),
                                );
                }
               
/* untuk fungsi yang di bawah ini, biasanya sudah ada di SiteControllernya, tapi untuk kasus pendaftaran akun, fungsi ini perlu ditambahkan pada controller yang bersangkutan (jadi nggak harus di SiteController aja) */

public function actions()
                {
                                return array(
                                                // captcha action renders the CAPTCHA image displayed on the contact page
                                                'captcha'=>array(
                                                                'class'=>'CCaptchaAction',
                                                                'backColor'=>0xFFFFFF,
                                                ),
                                                // page action renders "static" pages stored under 'protected/views/site/pages'
                                                // They can be accessed via: index.php?r=site/page&view=FileName
                                                'page'=>array(
                                                                'class'=>'CViewAction',
                                                ),
                                );
                }

Step 2.
Selanjutnya kita atur di modelnya yaitu di /protected/models/LoginForm.php

Yang perlu diperhatikan yaitu penambahan deklarasi nilai public $verifyCode dan penambahan rule array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')), untuk lebih jelasnya bisa dilihat seperti source code di bawah.

class LoginForm extends CFormModel
{
                public $username;
                public $password;
                public $rememberMe;
                public $verifyCode;     //ini yang perlu ditambahkan

                private $_identity;

                /**
                 * Declares the validation rules.
                 * The rules state that username and password are required,
                 * and password needs to be authenticated.
                 */
                public function rules()
                {
                                return array(
                                                // username and password are required
                                                array('username, password, verifyCode', 'required'),
                                                // rememberMe needs to be a boolean
                                                array('rememberMe', 'boolean'),
                                                // password needs to be authenticated
                                                array('password', 'authenticate'),
                                                array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),    //dan ini yang harus ditambahkan
                                );
                }
Dan untuk coding selanjutnya sama, tidak ada perubahan apapun.

Step 3.
Terakhir kita atur di view-nya yaitu di /protected/views/site/login.php
Ingat !! Untuk yang menggunakan theme atau bootstrap atur view-nya di theme-nya ya.
Nah di bawah ini adalah source code untuk menampilkan captcha-nya ..

<?php if (extension_loaded('gd')): ?>
<div>
<?php echo CHtml::activeLabelEx($model, 'Kode Verifikasi') ?>
                <div>
                                <?php echo $form->textField($model,'verifyCode', array('class'=>'input-small')); ?>
                                <?php $this->widget('CCaptcha');?>
                </div>
                <div class="hint">Ketik tulisan yang ada pada gambar.</div>
</div>
<?php endif;?>

Source code di atas bisa kamu letakkan setelah source code username dan password, serta sebelum source code untuk menampilkan button-nya.



Sekian dari saya, semoga bisa dimengerti dan semoga bermanfaat :)

Salam programmer yii Indonesia.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Menyembunyikan Menu Agar Tampil Setelah Login

Anyeong chingu :)


Sekarang saya mau posting tentang menyembunyikan menu sebelum guest login. Ternyata gampang banget caranya :)
Kita buka /protected/views/layouts/main.php (untuk yang pake theme, buka di /theme/folder_themenya/views/layouts/main.php

<?php $this->widget('bootstrap.widgets.TbNavbar',array(
    'items'=>array(
        array(
            'class'=>'bootstrap.widgets.TbMenu',
            'items'=>array(
           array('label'=>'Home', 'url'=>array('/site/index'), 'visible'=>!Yii::app()->user->isGuest),
     array('label'=>'Surat Masuk', 'url'=>array('/suratMasuk/admin'), 'visible'=>!Yii::app()->user->isGuest),
           array('label'=>'Surat Keluar', 'url'=>array('/suratKeluar/admin'), 'visible'=>!Yii::app()->user->isGuest),
    array('label'=>'Gambar', 'url'=>array('/tblImages/index'), 'visible'=>!Yii::app()->user->isGuest),
            array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
  array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
            ),
        ),
    ),
)); ?>

Nah itu perhatikan 'visible' nya.. Nanti hasilnya jadi seperti ini...


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Database Arsip Surat dan Instalasi YII

Anyeong chingu :)
Salam kenal dari programmer amatir yii yang masih belajar :)
Di sini saya akan membahas bagaimana membuat sebuah aplikasi web Pengarsipan Surat Masuk dan Surat Keluar. Ini adalah project magang saya selama 3 bulan di Yayasan AirPutih “connected the unconnected” yang kantornya terletak di Pasar Minggu.
Curcol dulu sedikit, bisa dibayangkan bagaimana saya bolak-balik dari Rawa Buaya (Cengkareng) – Pasar Minggu 5 hari kerja selama 3 bulan, tapi suka bolos-bolos masuk juga sih hehehe :) Nah, belum lagi masalah LDR with ‘oppa’, yang dia juga lagi magang di PLN Gandul, tuh kan kebayang gimana beratnya hari-hari yang saya lalui, nahan kangennya itu loh. Ups !!

Oke fokus lagi. Di sini saya membuat database dengan nama db_arsip_surat yang terdiri atas 4 tabel yaitu surat_masuk, surat_keluar, tbl_images, dan tbl_manajer.


Saya jelaskan dulu.
Surat masuk ini berfungsi menampung semua inputan surat yang masuk ke kantor Yayasan AirPutih, yang nantinya akan di-input oleh admin dan dapat dilihat oleh manajer.
Surat keluar berfungsi menampung semua surat yang akan diberikan kepada mitra Yayasan AirPutih, yang mana admin bertugas membuat suratnya, kemudian sebelum dicetak, manajer akan mengecek terlebih dulu isi surat tersebut. Di sini manajer berhak menyetujui surat dan menolak (dalam arti memberikan koreksi untuk diperbaiki isi suratnya). Setelah manajer menyetujui surat tersebut, admin dapat mencetak dan mengirimkannya.
Tbl images berfungsi menampung gambar yang berupa logo dan alamat kantor Yayasan AirPutih, yang digunakan sebagai kop surat saat surat dicetak.
Tbl manajer berfungsi menampung koreksi dari manajer, termasuk menyetujui atau menolak surat keluar. Sehingga tbl manajer ini berelasi dengan surat keluar.

Nah di sini saya buat dengan nama arsip, di dalam folder arsip terdapat 2 buah yii yaitu arsipsurat (yang digunakan oleh admin) dan arsipsurat_manajer (yang digunakan oleh manajer). Sebenarnya cara saya membuat 2 yii ini adalah saya menginstal satu per satu dan disimpan ke htdocs, kemudian saya copy dan paste di htdocs/arsip. Lalu crud satu per satu yii nya. Di sini ga perlu saya jelaskan cara crudnya ya, saya anggap sudah terbiasa meng-crud yii.
Ini tampilan awalnya..


Ketika kita klik admin, maka akan tampil seperti gambar yang ini..


Dan ketika kita akan masuk sebagai manajer maka akan tampil gambar yang ini..


Nah, karena ada 2 yii maka kita harus meng-crud kedua yii tersebut dengan semua tabel yang ada di database. Jadi di sini saya menggunakan database yang sama untuk 2 yii yang saya gunakan.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Setelah lama Blog ini berdebu :)

Annyeong chingu :)

Udah lama banget ga posting di blog ini.. Blog yang gue bikin buat penilaian tugas alias laporan mata kuliah Perancangan Basis Data.

Ceritanya, gue lagi magang nih.. Dan gue dapet project buat bikin aplikasi pengarsipan surat pake yii framework..

Biar blog ini ga usang banget, gue mau curahin semua masalah yang gue hadapi selama pembuatan aplikasi ini di sini.. Semoga bermanfaat buat yang baca :)

Emang sih, gue magang udah sebulan lebih 3 minggu, tapi gue masih inget gimana stress nya nyari codingan,, dan gimana senengnya gue ketika gue bisa nyelesein error gue sendiri..
Gue makin jatuh cinta lah sama yii framework <3

Ini buat intermezzo aja. Share kesulitan gue-nya besok-besok aja hehehe :D
Tapi gue pasti share kok, biar gue ga lupa juga kalo next time nemuin problem yang sama lagi.
Kan emang dasarnya gue suka nulis, jadi gue niatin buat posting semuanya di sini :)

Ok sampai jumpa reader ^^
~ annyeongigyeseyo ..

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Pertemuan 9 - Logika Fuzzy

Logika Fuzzy dengan Matlab

1. Ketik fuzzy [enter]
2. Edit --> Add variabel --> Input (untuk memasukkan inputan menjadi 2)
3. Ganti nama input dan outputnya sesuai kebutuhan.
4. File --> Export to workspace
5. Edit --> Memberfunction (di sini ganti nama dan range-nya, parameter jangan diganti)
6. Edit --> Rules (buat kondisinya di sini, disesuaikan dengan kebutuhan) --> Add Rule
7. Masih di jendela Rule Editor, View --> Rules (nah di sini nanti kelihatan jadinya)

Maaf kemarin bikin note nya ga lengkap, alhasil upload ilmu nya ga lengkap juga, hehehe, cuma langkah-langkahnya doang..








Sumber : slide Kak Dine

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Pertemuan 10 - Fuzzy Database

Contohnya ..


Tabel karyawan











Kemudian diperoleh data temporer dari tabel karyawan











Pembentukan himpunan fuzzy untuk variabel USIA KARYAWAN
Usia karyawan dibagi menjadi 3 himpunan: MUDA, PAROBAYA, TUA








Fungsi Keanggotaan








Pembentukan himpunan fuzzy untuk variabel MASA KERJA
Masa kerja dibagi menjadi 2 himpunan : BARU dan LAMA

Pembentukan himpunan fuzzy untuk variabel GAJI
Gaji dibagi menjadi 3 himpunan: RENDAH, SEDANG, dan TINGGI



HASIL FUZZY DATABASE TAHANI



Query 1
Karyawan yang masih muda tapi mempunyai gaji tinggi.
select NAMA from KARYAWAN where (umur = "MUDA") and (gaji = "TINGGI")












Query 2
Karyawan yang masih muda atau yang mempunyai gaji tinggi.
select NAMA from KARYAWAN where (umur = "MUDA") or (gaji = "TINGGI")













Query 3
Karyawan yang masih muda tapi masa kerjanya sudah lama.
select NAMA from KARYAWAN where (umur = "MUDA") and (masa kerja = "LAMA")















Query 4
Karyawan yang parobaya dan gajinya sedang, atau karyawan yang parobaya tapi masa kerjanya sudah lama.
select NAMA from KARYAWAN where (umur = "PAROBAYA") and [(gaji = "SEDANG") and (masa kerja = "LAMA")]














Sumber : slide Kak Dine

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments