oguz1761
10/1/2019 - 7:24 AM

Villa

<?php

class RentalVillas extends CI_Controller
{   public $viewFolder = "";


    public function __construct()
    {
        parent::__construct();
        $this->safety();
        $this->load->model("RentalVillas_model");
        $this->load->model("RV_availability_model");
        $this->load->model("RentalVillas_image_model");
        $this->load->model("RV_room_features_model");
        $this->load->model("RV_room_image_model");
        $this->viewFolder = "admin/villas";
        $this->load->helper('security');
    }

    function safety() // session kontrol metodu
    {
        /*  diğer yol. $check = $this->session->userdata("check"); //check adlı sessionda tutulan değeri userdata ile okuyoruz.
         $info = $this->session->userdata("info");
         if(!isset($check) || $check != true ){ //check isimli sessionda değer var mı değer var ve true ise userop sayfasına yönlendir.
             redirect("userop");
         } */
        // helperda get active isimli fonksiyonu tanımladık ve burada kullandık.
        if(!get_active_user()){
            redirect("userop");
        }

    }

    public function index()
    {
        $viewData = new stdClass();
        $result = $this->RentalVillas_model->get_all();
        $viewData->vievFolder = $this->viewFolder;
        $viewData->subVievFolder = "list";
        $viewData->info = $result;
        $viewData->routeWay = $this->routeWay;

        $this->load->view("{$viewData->vievFolder}/{$viewData->subVievFolder}", $viewData);
    }

    public function delete($id)//silme metodu
    {
        $delete = $this->RentalVillas_model->delete(
            array(
                "id" => $id
            )
        );

        if($delete){

            // Oda özelliklerini siler
            $delete3 = $this->RV_room_features_model->delete(
                array(
                    "villa_id" => $id
                )
            );
            // ## end ##

            // villa resmini siler
            $file_name = $this->RentalVillas_image_model->get(
                array(
                    "villa_id" => $id
                )
            );

            $delete2 = $this->RentalVillas_image_model->delete(
                array(
                    "villa_id" => $id
                )
            );
            if($delete2){
                unlink("uploads/villas/$file_name->img_url");
            }
            // ## end ##



            $alert = array(
                "tittle" => "İşlem başarılı",
                "text"   => "Kayıt silindi.",
                "type"   => "success"
            );
        }
        else{
            $alert = array(
                "tittle" => "İşlem başarısız !!!",
                "text"   => "Kayıt silinirken bir hata oluştu.",
                "type"   => "success"
            );
        }

        $this->session->set_flashdata("alert",$alert);
        redirect("$this->routeWay");

    }

    public function add_v() //ürün ekleme ekranı (add view)
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
        $viewData->subViewFolder = "add"; //viewdataya subviewv folderı atadık
        $viewData->routeWay = $this->routeWay;
        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
    }

    public function add() //ürün ekleme metodu
    {
        $this->load->library("form_validation");
        $this->form_validation->set_rules("title","Başlık","required|trim");
        $this->form_validation->set_rules("numroom","Oda Sayısı","required|trim");
        $this->form_validation->set_rules("capacity","Kişi Kapasitesi","required|trim");
        $this->form_validation->set_rules("entry","Giriş Saati","required|trim");
        $this->form_validation->set_rules("out","Çıkış Saati","required|trim");
        $this->form_validation->set_rules("price","Günlük Ücret","required|trim");
        $this->form_validation->set_rules("adress","Adres","required|trim");



        $this->form_validation->set_message(
            array(
                "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
            )
        );

        $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.

        if($validate){
            $data = array(
                "title"                  => $this->input->post("title"),
                "url"                    => sef($this->input->post("title")), //helper içinden sef fonksiyonunu kullandık. (convert to seo)
                "person_capacity"        => $this->input->post("capacity"),
                "number_of_rooms"        => $this->input->post("numroom"),
                "number_of_bath"         => $this->input->post("numbath"),
                "distanceto_beach"       => $this->input->post("disbeach"),
                "distance_to_center"     => $this->input->post("discenter"),
                "distance_to_airport"    => $this->input->post("disairport"),
                "distance_to_market "    => $this->input->post("dismarket"),
                "entry_time"             => $this->input->post("entry"),
                "check_out_time"         => $this->input->post("out"),
                "daily_price"            => $this->input->post("price"),
                "deposit"                => $this->input->post("deposit"),
                "cleaning_time"          => $this->input->post("cleantime"),
                "adress"                 => $this->input->post("adress"),
                "createdAt"              => date("Y-m-d")
            );
            $data = $this->security->xss_clean($data);
            $insert = $this->RentalVillas_model->add($data);
            if($insert){
                // alert eklemenin diğer yolu.  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Ürün başarıyla eklendi.</strong></div>");
                $alert = array(
                    "tittle" => "İşlem başarılı",
                    "text"   => "Yeni kayıt eklendi.",
                    "type"   => "success"
                );
            }
            else{
                $alert = array(
                    "tittle" => "İşlem başarısızdır !!!",
                    "text" => "Kayıt ekenirken bir hata oluştu.",
                    "type" => "success"
                );
            }
            // İşlemin sonucunu sessiona yazar . . .
            $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.
            redirect("$this->routeWay");
        }
        else{

            $viewData = new stdClass();
            $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
            $viewData->subViewFolder = "add"; //viewdataya subviewv folderı atadık
            $viewData->routeWay = $this->routeWay;
            $viewData->form_error = true;
            $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
        }
    }

    public function update_v($id = null) //ürün güncelleme ekranı (update view)
    {
        $viewData = new stdClass();
        $item = $this->RentalVillas_model->get(
            array(
                "id" => $id
            )
        );
        /* viewe gönderilecek değişkenlerin set edilmesi */
        $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
        $viewData->subViewFolder = "update"; //viewdataya subviewv folderı atadık
        $viewData->routeWay = $this->routeWay;
        $viewData->item = $item; // $itemı viewdataya yükledik
        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData); // ve view datayı viewe paketledik.
    }

    public function update($id) //ürün güncelleme metodu
    {
        $this->load->library("form_validation");
        $this->form_validation->set_rules("title","Başlık","required|trim");
        $this->form_validation->set_rules("numroom","Oda Sayısı","required|trim");
        $this->form_validation->set_rules("capacity","Kişi Kapasitesi","required|trim");
        $this->form_validation->set_rules("entry","Giriş Saati","required|trim");
        $this->form_validation->set_rules("out","Çıkış Saati","required|trim");
        $this->form_validation->set_rules("price","Günlük Ücret","required|trim");
        $this->form_validation->set_rules("adress","Adres","required|trim");

        $this->form_validation->set_message(
            array(
                "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
            )
        );

        $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.

        if($validate){
            $data = array(
                "title"                  => $this->input->post("title"),
                "url"                    => sef($this->input->post("title")), //helper içinden sef fonksiyonunu kullandık. (convert to seo)
                "person_capacity"        => $this->input->post("capacity"),
                "number_of_rooms"        => $this->input->post("numroom"),
                "number_of_bath"         => $this->input->post("numbath"),
                "distanceto_beach"       => $this->input->post("disbeach"),
                "distance_to_center"     => $this->input->post("discenter"),
                "distance_to_airport"    => $this->input->post("disairport"),
                "distance_to_market "    => $this->input->post("dismarket"),
                "entry_time"             => $this->input->post("entry"),
                "check_out_time"         => $this->input->post("out"),
                "daily_price"            => $this->input->post("price"),
                "deposit"                => $this->input->post("deposit"),
                "cleaning_time"          => $this->input->post("cleantime"),
                "adress"                 => $this->input->post("adress"),
                "createdAt"              => date("Y-m-d")
            );
            $data = $this->security->xss_clean($data);
            $update = $this->RentalVillas_model->update(
                array(
                    "id" => $id
                ), $data);
            if($update){
                $alert = array(
                    "tittle" => "İşlem başarılı",
                    "text"   => "Kayıt güncellendi.",
                    "type"   => "success"
                );
                //  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Kayıt başarıyla güncellendi.</strong></div>");
            }
            else{
                $alert = array(
                    "tittle" => "İşlem başarısız",
                    "text"   => "Kayıt güncellenirken bir hata oluştu.",
                    "type"   => "error"
                );
            }
            $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.
            redirect("$this->routeWay");
        }
        else{
            $viewData = new stdClass();
            $item = $this->RentalVillas_model->get(
                array(
                    "id" => $id
                )
            );
            $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
            $viewData->subViewFolder = "update"; //viewdataya subviewv folderı atadık
            $viewData->form_error = true;
            $viewData->item = $item;
            $viewData->routeWay = $this->routeWay;
            $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
        }
    }

    public function location_info($id){
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->subViewFolder = "location_info";
        $viewData->routeWay = $this->routeWay;

        $viewData->item = $this->RentalVillas_model->get( array(
            "id" => $id
            )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData);
    }

    /*###############  resim işlemleri  ##################*/

    public function image_v($id = null)//resimler sayfasını getiren metod
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
        $viewData->subViewFolder = "image"; //viewdataya subviewv folderı atadık
        $viewData->routeWay = $this->routeWay;
        $viewData->item = $this->RentalVillas_model->get( array(
                "id" => $id
            )
        );

        $viewData->item_images = $this->RentalVillas_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
            array(
                "villa_id" => $id
            )
        );
        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}",$viewData); // ve view datayı viewe paketledik.
    }

    public function image_upload($id)// resim yükleme metodu ***önemli !!!***
    {
        $config["allowed_types"] = "jpg|jpeg|png"; //Yüklenecek dosyaların türü = allowed types.
        $config["upload_path"]   = "uploads/villas/"; //Bu dosyalar nereye yüklenecek.
        $config["encrypt_name"]  = true;   //view tarafında da bu komutu kullanabilmek için form action içinde "enctype="multipart/form-data" " yazdık.

        $this->load->library("upload",$config);
        $upload = $this->upload->do_upload("file");

        if($upload){
            $uploaded_file = $this->upload->data("file_name");

            $this->RentalVillas_image_model->add(
                array(
                    "img_url"    => $uploaded_file,
                    "rank"       => 0,
                    "isActive"   => 1,
                    "createdAt"  => date("Y-m-d"),
                    "villa_id" => $id,
                    "isCover"    => 0
                )
            );

        }
    }

    public function refresh_image_list($id)
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
        $viewData->routeWay = $this->routeWay;

        $viewData->item_images = $this->RentalVillas_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
            array(
                "villa_id" => $id
            )
        );

        $render_html = $this->load->view("{$viewData->viewFolder}/render_elements/image_list_v",$viewData,true);

        echo $render_html;

    }

    public function isActiveSetter_image($id)// aktif pasif döüşümünü viewden alığ db ye gönderen metod
    {
        if($id){

            $isActive = ($this->input->post("data") == "true") ? 1 : 0 ; // tek satırlık if komutu.  if = "?" eğer içerdeki veri true ise 1 ver.
            $this->RentalVillas_image_model->update(
                array(
                    "id"       => $id
                ),
                array(
                    "isActive" => $isActive
                )
            );
        }
    }

    public function isCoverSetter($id,$parent_id)// kapak fotoğrafı yapmaya yarayan method. $parent_id = view den gelecek olan product_id
    {
        if($id && $parent_id){

            $isCover = ($this->input->post("data") == "true") ? 1 : 0 ; // tek satırlık if komutu.  if = "?" eğer içerdeki veri true ise 1 ver.
            //Kapak yapılmak istenen kayıt
            $this->RentalVillas_image_model->update(
                array(
                    "id"         => $id,
                    "villa_id" => $parent_id
                ),
                array(
                    "isCover" => $isCover
                )
            );
            //Kapak yapılmayan diğer kayıtlar
            $this->RentalVillas_image_model->update(
                array(
                    "id !="         => $id,
                    "villa_id" => $parent_id
                ),
                array(
                    "isCover" => 0
                )
            );

            $viewData = new stdClass();
            $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
            $viewData->subViewFolder = "image"; //viewdataya subviewv folderı atadık
            $viewData->routeWay = $this->routeWay;

            $viewData->item_images = $this->RentalVillas_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
                array(
                    "villa_id" => $parent_id
                )
            );

            $render_html = $this->load->view("{$viewData->viewFolder}/render_elements/image_list_v",$viewData,true);

            echo $render_html;

        }
    }

    public function delete_image($id,$parent_id)//silme metodu
    {
        $file_name = $this->RentalVillas_image_model->get(
            array(
                "id" => $id
            )
        );

        $delete = $this->RentalVillas_image_model->delete(
            array(
                "id" => $id
            )
        );

        if($delete){
            unlink("uploads/villas/$file_name->img_url");

            redirect("$this->routeWay/image_v/$parent_id");
        }
        else {
            redirect("$this->routeWay/image_v/$parent_id");
        }
    }

    /*###############  resim işlemleri bitiş  ##################*/

    /* ############# Villa Özellikleri ############## */

    public function villa_features_v($id = null)

    {
        $viewData = new stdClass();
        $viewData->routeWay = $this->routeWay;
        $viewData->viewFolder = $this->viewFolder;
        $viewData->subViewFolder = "villa_features/features";

        $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!!
                "id" => $id
            )
        );

        $viewData->item_feature = $this->RentalVillas_model->get_all_features( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
            array(
                "villa_id" => $id
            )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData);
    }

    public function add_feature_v($id = null){

        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->subViewFolder = "villa_features/add_feature";
        $viewData->routeWay = $this->routeWay;

        $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!!
                "id" => $id
            )
        );


        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}" , $viewData);


    }

    public function add_feature($id) //Villa özellik ekleme metodu
    {

        $this->load->library("form_validation");
        $this->form_validation->set_rules("name","Özellik Adı","required|trim");
        $this->form_validation->set_message(
            array(
                "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
            )
        );


        $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.

        if($validate){
            $data = array(
                "villa_id"               => $id,
                "feature_name"           => $this->input->post("name"),
                "description"            => $this->input->post("description")
            );
            $data = $this->security->xss_clean($data);
            $insert = $this->RentalVillas_model->add_feature($data);
            if($insert){
                // alert eklemenin diğer yolu.  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Ürün başarıyla eklendi.</strong></div>");
                $alert = array(
                    "tittle" => "İşlem başarılı",
                    "text"   => "Yeni kayıt eklendi.",
                    "type"   => "success"
                );
            }
            else{
                $alert = array(
                    "tittle" => "İşlem başarısızdır !!!",
                    "text" => "Kayıt ekenirken bir hata oluştu.",
                    "type" => "success"
                );
            }
            // İşlemin sonucunu sessiona yazar . . .
            $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.
            redirect("$this->routeWay/villa_features_v/$id");
        }
        else{
            $viewData = new stdClass();
            $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!! buradan viewe item içersinde ekleme yapacağımız villanın id sini gönderiyor
                    "id" => $id
                )
            );

            $viewData->routeWay = $this->routeWay;
            $viewData->viewFolder = $this->viewFolder;
            $viewData->subViewFolder = "villa_features/add_feature";
            $viewData->form_error = true;

            $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.

        }
    }

    public function delete_feature($id,$id2)// özellik silme metodu. id2 villa id si view den geliyor
    {
        $delete = $this->RentalVillas_model->delete_feature(
            array(
                "id" => $id
            )
        );

        if($delete){
            $alert = array(
                "tittle" => "İşlem başarılı",
                "text"   => "Kayıt silindi.",
                "type"   => "success"
            );
        }
        else{
            $alert = array(
                "tittle" => "İşlem başarısız !!!",
                "text"   => "Kayıt silinirken bir hata oluştu.",
                "type"   => "success"
            );
        }

        $this->session->set_flashdata("alert",$alert);
        redirect("$this->routeWay/villa_features_v/$id2");


    }

    // Villaya ait oda özellikleri

    public function room_image_upload($id){

        $config["allowed_types"] = "jpg|jpeg|png"; //Yüklenecek dosyaların türü = allowed types.
        $config["upload_path"]   = "uploads/room/"; //Bu dosyalar nereye yüklenecek.
        $config["encrypt_name"]  = true;   //view tarafında da bu komutu kullanabilmek için form action içinde "enctype="multipart/form-data" " yazdık.

        $this->load->library("upload",$config);
        $upload = $this->upload->do_upload("file");

        if($upload){
            $uploaded_file = $this->upload->data("file_name");

            $this->RV_room_image_model->add(
                array(
                    "img_url"    => $uploaded_file,
                    "isActive"   => 1,
                    "createdAt"  => date("Y-m-d"),
                    "room_id" => $id,
                    "isCover"    => 0
                )
            );

        }
    }

    public function room_image_v($id=null)
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->subViewFolder = "room_features/image";
        $viewData->routeWay = $this->routeWay;

        $viewData->item = $this->RV_room_features_model->get( array(  // unutma !!!
                "id" => $id
            )
        );

        $viewData->item_images = $this->RV_room_image_model->get_all(
            array(
                "room_id" =>$id )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData);
    }

    public function refresh_image_list_room($id)
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
        $viewData->routeWay = $this->routeWay;

        $viewData->item_images = $this->RV_room_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
            array(
                "room_id" => $id
            )
        );

        $viewData->item = $this->RV_room_features_model->get( array(  // unutma !!!
                "id" => $id
            )
        );

        $render_html = $this->load->view("{$viewData->viewFolder}/room_features/render_elements/image_list_v",$viewData,true);
        echo $render_html;

    }

    public function delete_room_image($id,$parent_id)//silme metodu
    {
        $file_name = $this->RV_room_image_model->get(
            array(
                "id" => $id
            )
        );

        $delete = $this->RV_room_image_model->delete(
            array(
                "id" => $id
            )
        );

        if($delete){
            unlink("uploads/room/$file_name->img_url");

            redirect("$this->routeWay/room_image_v/$parent_id");
        }
        else {
            redirect("$this->routeWay/room_image_v/$parent_id");
        }
    }

    public function room_features($id = null)
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->routeWay = $this->routeWay;
        $viewData->subViewFolder = "room_features/list";
        $viewData->item = $this->RentalVillas_model->get( array(  //viewe item içinde get den gelen sonucu gönderiyor. yani villa idsi buradan gidiyor.
                "id" => $id
            )
        );

        $viewData->item_feature = $this->RV_room_features_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
            array(
                "villa_id" => $id
            )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData);
    }

    public function delete_room_feature($id,$id2)// özellik silme metodu. id2 villa id si view den geliyor, ##### kayıt silinince resimleri de siliniyor.
    {
        $delete = $this->RV_room_features_model->delete(
            array(
                "id" => $id
            )
        );

        if($delete){

            //

            $file_name = $this->RV_room_image_model->get(
                array(
                    "room_id" => $id
                )
            );

            $delete2 = $this->RV_room_image_model->delete(
                array(
                    "room_id" => $id
                )
            );

            if($delete2){
                unlink("uploads/room/$file_name->img_url");
            }

            $alert = array(
                "tittle" => "İşlem başarılı",
                "text"   => "Kayıt silindi.",
                "type"   => "success"
            );
        }
        else{
            $alert = array(
                "tittle" => "İşlem başarısız !!!",
                "text"   => "Kayıt silinirken bir hata oluştu.",
                "type"   => "success"
            );
        }

        $this->session->set_flashdata("alert",$alert);
        redirect("$this->routeWay/room_features/$id2");

    }

    public function add_roomf_v($id = null){

        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->subViewFolder = "room_features/add";
        $viewData->routeWay = $this->routeWay;

        $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!!
                "id" => $id
            )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}" , $viewData);

    }

    public function add_roomf($id) //Villa özellik ekleme metodu
    {

        $this->load->library("form_validation");
        $this->form_validation->set_rules("name","Oda Adı","required|trim");
        $this->form_validation->set_rules("feature","Oda Özelliği","required|trim");
        $this->form_validation->set_message(
            array(
                "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
            )
        );

        $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.

        if($validate){
            $data = array(
                "villa_id"         => $id,
                "room_name"        => $this->input->post("name"),
                "room_feature"     => $this->input->post("feature")
            );
            $data = $this->security->xss_clean($data);
            $insert = $this->RV_room_features_model->add($data);
            if($insert){
                // alert eklemenin diğer yolu.  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Ürün başarıyla eklendi.</strong></div>");
                $alert = array(
                    "tittle" => "İşlem başarılı",
                    "text"   => "Yeni kayıt eklendi.",
                    "type"   => "success"
                );
            }
            else{
                $alert = array(
                    "tittle" => "İşlem başarısızdır !!!",
                    "text" => "Kayıt ekenirken bir hata oluştu.",
                    "type" => "success"
                );
            }
            // İşlemin sonucunu sessiona yazar . . .
            $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.
            redirect("$this->routeWay/room_features/$id");
        }
        else{

            $viewData = new stdClass();

            $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!! buradan viewe item içersinde ekleme yapacağımız villanın id sini gönderiyor
                    "id" => $id
                )
            );

            $viewData->routeWay = $this->routeWay;
            $viewData->viewFolder = $this->viewFolder;
            $viewData->subViewFolder = "room_features/add";
            $viewData->form_error = true;

            $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.

        }
    }

    public function update_roomf_v($id = null){
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->routeWay = $this->routeWay;
        $viewData->subViewFolder = "room_features/update";



        $viewData->item = $this->RV_room_features_model->get( array(  // unutma !!!
                "id" => $id
            )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData);
    }

    public function update_roomf($id,$villa_id)
    {
        $this->load->library("form_validation");
        $this->form_validation->set_rules("name","Oda Adı","required|trim");
        $this->form_validation->set_rules("feature","Oda Özelliği","required|trim");
        $this->form_validation->set_message(
            array(
                "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
            )
        );

        $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.

        if($validate){
            $where = array(
                "id" => $id
            );
            $data = array(
                "room_name"        => $this->input->post("name"),
                "room_feature"     => $this->input->post("feature")
            );
            $data = $this->security->xss_clean($data);
            $update = $this->RV_room_features_model->update($where,$data);
            if($update){
                // alert eklemenin diğer yolu.  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Ürün başarıyla eklendi.</strong></div>");
                $alert = array(
                    "tittle" => "İşlem başarılı",
                    "text"   => "Yeni kayıt eklendi.",
                    "type"   => "success"
                );
            }
            else{
                $alert = array(
                    "tittle" => "İşlem başarısızdır !!!",
                    "text" => "Kayıt ekenirken bir hata oluştu.",
                    "type" => "success"
                );
            }
            // İşlemin sonucunu sessiona yazar . . .
            $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.



            redirect("$this->routeWay/room_features/$villa_id");
        }
        else{

            $viewData = new stdClass();

            $viewData->item = $this->RV_room_features_model->get( array(  // unutma !!! buradan viewe item içersinde ekleme yapacağımız villanın id sini gönderiyor
                    "id" => $id
                )
            );

            $viewData->routeWay = $this->routeWay;
            $viewData->viewFolder = $this->viewFolder;
            $viewData->subViewFolder = "room_features/update";
            $viewData->form_error = true;

            $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.

        }
    }


    /* ############# Villa Özellikleri bitiş ############## */

    /* ############# Villa Availability ############## */

    public function add_availability_v($id = null)
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->routeWay   = $this->routeWay;
        $viewData->subViewFolder = "villa_availability/add";
        $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!!
                "id" => $id
            ),$item = null
        );

        $viewData->availabilities = $this->RV_availability_model->get_all(
            array(
                "villa_id"        => $id,
                "daily_date >="  => date("Y-m-d")
             )
        );

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}" , $viewData);
        
    }

    public function add_availability($id)
    {
        $this->load->library("form_validation");
        $this->form_validation->set_rules("start","Başlangıç Tarihi","required|trim");
        $this->form_validation->set_rules("end","Bitiş Tarihi","required|trim");
        $this->form_validation->set_message(
            array(
                "required"      => "<div class=\"alert alert-danger\" role=\"alert\">Lütfen <strong>%s</strong> Seçiniz !!!</div>"
            )
        );

        $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.

        if($validate) {

            $startDateArr = explode("/", $this->input->post("start"));
            $endDateArr = explode("/", $this->input->post("end"));

            $startDateStr = $startDateArr[2] . "-" . $startDateArr[0] . "-" . $startDateArr[1];
            $endDateStr = $endDateArr[2] . "-" . $endDateArr[0] . "-" . $endDateArr[1];

            $startDate = new DateTime($startDateStr);
            $endDate = new DateTime(date("Y-m-d", strtotime("1 day", strtotime($endDateStr)))); //bir gün eksik yazıyordu bu sebepten bu düzenlemey i yaptık.

            $interval = DateInterval::createFromDateString("1 day");
            $period = new DatePeriod($startDate, $interval, $endDate);

            foreach ($period as $date) {

                $record_test = $this->RV_availability_model->get(
                    array(
                        "villa_id" => $id,
                        "daily_date" => $date->format("Y-m-d")
                    )
                );
                if (empty($record_test)) {
                    $data = array(
                        "daily_date" => $date->format("Y-m-d"),
                        "villa_id" => $id,
                        "status" => 1
                    );

                    $data = $this->security->xss_clean($data);
                    $this->RV_availability_model->add($data);
                }
            }

            redirect("$this->routeWay/add_availability_v/$id");
        }

        else{
            $viewData = new stdClass();

            $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!! buradan viewe item içersinde ekleme yapacağımız villanın id sini gönderiyor
                    "id" => $id
                )
            );

            $viewData->availabilities = $this->RV_availability_model->get_all(
                array(
                    "villa_id"        => $id,
                    "daily_date >="  => date("Y-m-d")
                )
            );

            $viewData->routeWay = $this->routeWay;
            $viewData->viewFolder = $this->viewFolder;
            $viewData->subViewFolder = "villa_availability/add";
            $viewData->form_error = true;
            $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
        }

    }

    public function table_availability()
    {
        $viewData = new stdClass();
        $viewData->viewFolder = $this->viewFolder;
        $viewData->routeWay = $this->routeWay;
        $viewData->subViewFolder = "villa_availability/list";

        $viewData->item = $this->RentalVillas_model->get_all();

        $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData);
    }

    public function oguz($id = null) // ################### unutma incele
    {

        $viewData = new stdClass();
        $viewData->item = $this->RentalVillas_model->get( array(  // unutma !!!
                "id" => $id
            )
        );


        $data = array(
            "room_id" => 18
        );

        $veri = $this->RV_room_image_model->get_all($data);

        foreach ($veri as $veri){

            $file_name = $this->RV_room_image_model->get($data);
        }

      //  $data['deneme'] = $deger;
       // $data['asd'] = $deger;
        $data['xx'] = "bbbb";
        $this->load->view('oguz',$viewData);

    }
}

























<?php


class Replied_messages_model extends CI_Model
{   public $tablename = "replied_messages";  // jenerik bir yapı oluşturmak için buraya tablo adımızı değişkene atadık. Daha sonra bu classı kopyalayıp diğer işlemlerde kullanırken sadece burayı değiştireceğiz.

    public function __construct()
    {
        parent::__construct();
    }

    public function get_all($where = array()){// tablodaki tüm kayıtları getirir

        return $this->db->where($where)->get($this->tablename)->result(); // tablo adını yukarıda tanımladığımız yerden çektik.
    }

    public function add($data = array()){ //insert işlemi gerçekleştirir.

        return $this->db->insert($this->tablename,$data);

    }

    public function get($where = array()){//tablodan sadece istediğimiz kaydı getirir. $where controllerdan istediğimiz ürünü getirmemizi sağlayan dizidir.
        return $this->db->where($where)->get($this->tablename)->row();
    }

    public function update($where = array(), $data = array()){ //güncelleme yapan komut. $where= hangi satırı güncelleyeceği, $data tabloya gidecek olan güncelleme verisi

        return $this->db->where($where)->update($this->tablename, $data );

    }

    public function delete($where = array()){

        return $this->db->where($where)->delete($this->tablename);
    }
  <?php
  class Products extends CI_Controller{
      public $viewFolder = ""; //viewfolder diye bir değişken oluşturduk.

      public function __construct()
            {
                parent:: __construct();

                $this->safety();
                $this->load->helper('security'); //bunu yüklemesende çalışıyor sor !!!!!!!!
                $this->load->model("product_model");
                $this->load->model("product_image_model");
                $this->viewFolder = "admin/product"; //değişkenimize ürünler vievinin yolunu atadık.

            }

      function safety() // session kontrol metodu
      {
          /*  diğer yol. $check = $this->session->userdata("check"); //check adlı sessionda tutulan değeri userdata ile okuyoruz.
           $info = $this->session->userdata("info");
           if(!isset($check) || $check != true ){ //check isimli sessionda değer var mı değer var ve true ise userop sayfasına yönlendir.
               redirect("userop");
           } */
          // helperda get active isimli fonksiyonu tanımladık ve burada kullandık.
          if(!get_active_user()){
              redirect("userop");
          }

      }

      public function index() // ürün görüntüleme metodu index.
      {
          $viewData = new stdClass();

          $result = $this->product_model->get_all();
          $viewData->viewFolder = $this->viewFolder;
          $viewData->subViewFolder = "list";
          $viewData->info = $result;

          $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData );
      }

      public function add_v() //ürün ekleme ekranı (add view)
      {
          $viewData = new stdClass();
          $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
          $viewData->subViewFolder = "add"; //viewdataya subviewv folderı atadık

          $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
      }

      public function add() //ürün ekleme metodu
      {
          $this->load->library("form_validation");
          $this->form_validation->set_rules("title","Başlık","required|trim");
          $this->form_validation->set_message(
              array(
                  "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
              )
          );

          $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.
          if($validate){
              $data = array(
                  "title"        => $this->input->post("title"),
                  "description"  => $this->input->post("description"),
                  "url"          => sef($this->input->post("title")), //helper içinden sef fonksiyonunu kullandık. (convert to seo)
                  "rank"         => 0,
                  "isActive"     => 1,
                  "createdAt"    => date("Y-m-d")
              );

              $data = $this->security->xss_clean($data);
              $insert = $this->product_model->add($data);
              if($insert){
                 // alert eklemenin diğer yolu.  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Ürün başarıyla eklendi.</strong></div>");
                  $alert = array(
                      "tittle" => "İşlem başarılı",
                      "text"   => "Yeni kayıt eklendi.",
                      "type"   => "success"
                  );
              }
              else{
                  $alert = array(
                      "tittle" => "İşlem başarısızdır !!!",
                      "text" => "Kayıt ekenirken bir hata oluştu.",
                      "type" => "success"
                  );
              }
              // İşlemin sonucunu sessiona yazar . . .
              $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.
              redirect("Products");
          }
          else{
              $viewData = new stdClass();
              $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
              $viewData->subViewFolder = "add"; //viewdataya subviewv folderı atadık
              $viewData->form_error = true;
              $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
          }
      }

      public function update($id) //ürün güncelleme metodu
      {
          $this->load->library("form_validation");
          $this->form_validation->set_rules("title","Başlık","required|trim");
          $this->form_validation->set_message( array(
                  "required"      => "<div class=\"alert alert-danger\" role=\"alert\"><strong>%s</strong> Boş Bırakılamaz !!!</div>"
              )
          );
          $validate = $this->form_validation->run(); // donen cevap true veya false dur. true ise kurallardan başarılı bir şekilde geçmiştir false ise kurallara takılmıştır.
          if($validate){
              $where = array(
                  "title"        => $this->input->post("title"),
                  "description"  => $this->input->post("description"),
                  "url"          => sef($this->input->post("title")), //helper içinden sef fonksiyonunu kullandık. (convert to seo)
              );
              $where = $this->security->xss_clean($where);
              $update = $this->product_model->update(
                  array(
                      "id" => $id
                  ), $where);
              if($update){
                  $alert = array(
                      "tittle" => "İşlem başarılı",
                      "text"   => "Kayıt güncellendi.",
                      "type"   => "success"
                  );
                //  $this->session->set_flashdata("done", "<div class=\"alert alert-success\" role=\"alert\"><strong>Kayıt başarıyla güncellendi.</strong></div>");
              }
              else{
                  $alert = array(
                      "tittle" => "İşlem başarısız",
                      "text"   => "Kayıt güncellenirken bir hata oluştu.",
                      "type"   => "error"
                  );
              }
              $this->session->set_flashdata("alert",$alert); // alert isimli bir sessionumuz olacak ve $alert değişkenini buna atayacağız.
              redirect("Products");
          }
          else{
              $viewData = new stdClass();

              $item = $this->product_model->get(
                  array(
                      "id" => $id
                  )
              );
              $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
              $viewData->subViewFolder = "update"; //viewdataya subviewv folderı atadık
              $viewData->form_error = true;
              $viewData->item = $item;
              $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData ); // ve view datayı viewe paketledik.
          }
      }

      public function update_v($id) //ürün güncelleme ekranı (update view)
      {
          $viewData = new stdClass();
          $item = $this->product_model->get(
              array(
                  "id" => $id
              )
          );
          /* viewe gönderilecek değişkenlerin set edilmesi */
          $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
          $viewData->subViewFolder = "update"; //viewdataya subviewv folderı atadık
          $viewData->item = $item; // $itemı viewdataya yükledik
          $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}", $viewData); // ve view datayı viewe paketledik.
      }

      public function delete($id)//silme metodu
      {
                $delete = $this->product_model->delete(
                    array(
                        "id" => $id
                    )
                );

                if($delete){
                    $alert = array(
                        "tittle" => "İşlem başarılı",
                        "text"   => "Kayıt silindi.",
                        "type"   => "success"
                    );
                }
                else{
                    $alert = array(
                        "tittle" => "İşlem başarısız !!!",
                        "text"   => "Kayıt silinirken bir hata oluştu.",
                        "type"   => "success"
                    );
                }

          $this->session->set_flashdata("alert",$alert);
          redirect("products");


      }

      public function isActiveSetter($id)// aktif pasif döüşümünü viewden alığ db ye gönderen metod
      {
          if($id){

              $isActive = ($this->input->post("data") == "true") ? 1 : 0 ; // tek satırlık if komutu.  if = "?" eğer içerdeki veri true ise 1 ver.
              $this->product_model->update(
                  array(
                      "id"       => $id
                  ),
                  array(
                      "isActive" => $isActive
                  )
              );

          }
      }

                 /* #############    Product İmage İmplementation       ############## */

      public function image_v($id)//resimler sayfasını getiren metod
      {
          $viewData = new stdClass();
          $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
          $viewData->subViewFolder = "image"; //viewdataya subviewv folderı atadık

          $viewData->item = $this->product_model->get( array(
                  "id" => $id
              )
          );
          $viewData->item_images = $this->product_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
              array(
                  "product_id" => $id
              )
          );
          $this->load->view("{$viewData->viewFolder}/{$viewData->subViewFolder}",$viewData); // ve view datayı viewe paketledik.
      }

      public function isActiveSetter_image($id)// aktif pasif döüşümünü viewden alığ db ye gönderen metod
      {
          if($id){

              $isActive = ($this->input->post("data") == "true") ? 1 : 0 ; // tek satırlık if komutu.  if = "?" eğer içerdeki veri true ise 1 ver.
              $this->product_image_model->update(
                  array(
                      "id"       => $id
                  ),
                  array(
                      "isActive" => $isActive
                  )
              );

          }
      }

      public function isCoverSetter($id,$parent_id)// kapak fotoğrafı yapmaya yarayan method. $parent_id = view den gelecek olan product_id
      {
          if($id && $parent_id){

              $isCover = ($this->input->post("data") == "true") ? 1 : 0 ; // tek satırlık if komutu.  if = "?" eğer içerdeki veri true ise 1 ver.
              //Kapak yapılmak istenen kayıt
              $this->product_image_model->update(
                  array(
                      "id"         => $id,
                      "product_id" => $parent_id
                  ),
                  array(
                      "isCover" => $isCover
                  )
              );
              //Kapak yapılmayan diğer kayıtlar
              $this->product_image_model->update(
                  array(
                      "id !="         => $id,
                      "product_id" => $parent_id
                  ),
                  array(
                      "isCover" => 0
                  )
              );

              $viewData = new stdClass();
              $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
              $viewData->subViewFolder = "image"; //viewdataya subviewv folderı atadık

              $viewData->item_images = $this->product_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
                  array(
                      "product_id" => $parent_id
                  )
              );

              $render_html = $this->load->view("{$viewData->viewFolder}/render_elements/image_list_v",$viewData,true);

              echo $render_html;

          }
      }

      public function delete_image($id,$parent_id)//silme metodu
      {
          $file_name = $this->product_image_model->get(
              array(
                  "id" => $id
              )
          );

          $delete = $this->product_image_model->delete(
              array(
                  "id" => $id
              )
          );

          if($delete){
              unlink("uploads/products/$file_name->img_url");

              redirect("products/image_v/$parent_id");
          }
          else {
              redirect("products/image_v/$parent_id");
          }
      }

      public function image_upload($id)// resim yükleme metodu ***önemli !!!***
      {

          $config["allowed_types"] = "jpg|jpeg|png"; //Yüklenecek dosyaların türü = allowed types.
          $config["upload_path"]   = "uploads/products/"; //Bu dosyalar nereye yüklenecek.
          $config["encrypt_name"]  = true;   //view tarafında da bu komutu kullanabilmek için form action içinde "enctype="multipart/form-data" " yazdık.

          $this->load->library("upload",$config);
          $upload = $this->upload->do_upload("file");
          if($upload){
              $uploaded_file = $this->upload->data("file_name");

              $this->product_image_model->add(
                  array(
                      "img_url"    => $uploaded_file,
                      "rank"       => 0,
                      "isActive"   => 1,
                      "createdAt"  => date("Y-m-d"),
                      "product_id" => $id,
                      "isCover"    => 0
                  )
              );

          }else{
              print_r($this->upload->display_errors());


          }
      }

      public function refresh_image_list($id)
      {
          $viewData = new stdClass();
          $viewData->viewFolder = $this->viewFolder; //viewdataya viewfolder atadık
          $viewData->subViewFolder = "image"; //viewdataya subviewv folderı atadık


          $viewData->item_images = $this->product_image_model->get_all( //yukarıdan ürüne ait id yi aldık o id ye yüklenmiş resimleri burada viewdataya load yaptık.
              array(
                  "product_id" => $id
              )
          );

          $render_html = $this->load->view("{$viewData->viewFolder}/render_elements/image_list_v",$viewData,true);

          echo $render_html;
      }

    }