get recurring dates between two dates and periods php codeigniter

	public function getRecurringDates($start_date,$period,$weekdayNumbers = [])
	{
		$end_date = date("Y-m-d", strtotime("+$period days", strtotime($start_date)) );

	    $dateArr = array();

	    foreach ($weekdayNumbers as $key => $weekdayNumber) {


			$startDate = strtotime($start_date);
		    $endDate = strtotime($end_date);

	    	do
		    {
		        if(date("w", $startDate) != $weekdayNumber)
		        {
		            $startDate += (24 * 3600); // add 1 day
		        }
		    } while(date("w", $startDate) != $weekdayNumber);


		    while($startDate <= $endDate)
		    {
		        $dateArr[] = date('Y-m-d', $startDate);
		        $startDate += (7 * 24 * 3600); // add 7 days
		    }

	    }
		    
	    return($dateArr);
	}

        // die('lol');
	$event_id = (isset($_POST['event_id']))? $_POST['event_id'] : 331; 
	$start_date = (isset($_POST['event_start_date']))? $_POST['event_start_date'] : '2017-04-15';
	$period = (isset($_POST['event_period']))? $_POST['event_period'] : 60;
	$weekdayNumbers = (isset($_POST['event_id']) && is_array($_POST['event_id']))? $_POST['event_id'] : [0,2];

	$dateArr = $this->getRecurringDates($start_date, $period, $weekdayNumbers);
		

dublicate a child table rows and parent table rows mysql [CodeIgniter]


    // call to model to model ...
    public function duplicateTableRecord ($table, $keys = [],$ignore_key) 
    {
       /* generate the select query */
       if (is_array($keys)) {
           foreach ($keys as $key_field => $key_val) {

               $this->db->where($key_field, $key_val); 
           
           }
       }
       // return var_dump($keys);
       $query = $this->db->get($table);
      
        foreach ($query->result() as $row){   
           foreach($row as $key=>$val){        
              if($key != $ignore_key){ 
              /* $this->db->set can be used instead of passing a data array directly to the insert or update functions */
              $this->db->set($key, $val);               
              }//endif              
           }//endforeach
        }//endforeach

        /* insert the new record into table*/
        $this->db->insert($table); 
        return $this->db->insert_id();
    }

    public function duplicateForeignTableRecord ( $table, $foreign_keys_vals = [],$ignore_key,$update_keys_vals = [] ) 
    {
       /* generate the select query */
       if (is_array($foreign_keys_vals)) {
           foreach ($foreign_keys_vals as $key_field => $key_val) {

               $this->db->where($key_field, $key_val); 
           
           }
       }
       // $this->db->where($foreign_key_field, $foreign_key_val); 

       $query = $this->db->get($table);
      
        foreach ($query->result() as $row){   
           foreach($row as $key => $val){        
              if($key != $ignore_key){ 
              /* $this->db->set can be used instead of passing a data array directly to the insert or update functions */
                $this->db->set($key, $val);               
              }
              foreach ($update_keys_vals as $up_f_key => $up_f_val) {
                  if($key == $up_f_key){
                    $this->db->set($key, $up_f_val); 
                  }
              }
              //endif              
           }//endforeach

           $this->db->insert($table);
        
        }//endforeach

        /* insert the new record into table*/
         
        return $this->db->insert_id();
    }

    // call to function to from controller to model class. 
    public function clone_product($id)
    {
        $product_insert_id = $this->duplicateTableRecord(
            'product',
            ['id_product' => $id],
            'id_product'
        );

        $insert_id = $this->duplicateForeignTableRecord(
            'product_join_category',
            ['id_product' => $id],
            'id_product',
            [ 'id_product' => $product_insert_id ]
        );

        $insert_id = $this->duplicateForeignTableRecord(
            'product_data',
            ['id_product' => $id],
            'id_product_data',
            [ 'id_product' => $product_insert_id ]
        );
        
        $insert_id = $this->duplicateForeignTableRecord(
            'file',
            [ 'id_product' => $id ],
            'id_file',
            [ 'id_product' => $product_insert_id ]
        );
        
        $insert_id = $this->duplicateForeignTableRecord(
            'metatag',
            [ 'section_item_id' => $id, 'section' => 'product' ],
            'id_meta',
            [   'section_item_id' => $product_insert_id ]
        );

        return $product_insert_id;
    }

    // call to the model from controller 
    public function copy($id = '')
    {
        if ($id != '') {

            $record = $this->b_product_model->clone_product($id);
        
        }
        
        // _trace($record);
        redirect(base_url() . 'admin/produkty');
    }

[php] Breadcrumbs for Codeigniter in the helper function

function _breadcrumbs()
{
    $ci = & get_instance();
    $urlSegment = $ci->uri->segment_array();

    if (($key = array_search("product", $urlSegment)) !== false) {
        unset($urlSegment[$key]);
    }
    if (($key = array_search("products", $urlSegment)) !== false) {
        unset($urlSegment[$key]);
    }
    if (($key = array_search("product-category", $urlSegment)) !== false) {
        unset($urlSegment[$key]);
    }

    // print_r($urlSegment);

    $breadcrumbs = '<div class="row">
            <div class="col-sm-12">
                <p class="breadcrumb"><a href="" title=""><img src="' . base_url() .'assets/frontend/img/home.svg" alt="" /></a> ';

    foreach ($urlSegment as $key => $segment) {
        $breadcrumbs .= '<img src="'. base_url() .'assets/frontend/img/gt.png" alt="" /> '. ucfirst($segment) . ' ';
    }

    $breadcrumbs .= '</p>
            </div>
        </div>';

    echo $breadcrumbs;
}

Error reporting management snippets in php [dev/prod]

/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *---------------------------------------------------------------
 *
 * You can load different configurations depending on your
 * current environment. Setting the environment also influences
 * things like logging and error reporting.
 *
 * This can be set to anything, but default usage is:
 *
 *     development
 *     testing
 *     production
 *
 * NOTE: If you change these, also change the error_reporting() code below
 */
	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

/*
 *---------------------------------------------------------------
 * ERROR REPORTING
 *---------------------------------------------------------------
 *
 * Different environments will require different levels of error reporting.
 * By default development will show errors but testing and live will hide them.
 */
switch (ENVIRONMENT)
{
	case 'development':
		error_reporting(0);
		// error_reporting(-1);
		ini_set('display_errors', 1);
		ini_set('max_execution_time', -1);
	break;

	case 'testing':
	case 'production':
		ini_set('display_errors', 0);
		if (version_compare(PHP_VERSION, '5.3', '>='))
		{
			error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
		}
		else
		{
			error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);
		}
	break;

	default:
		header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
		echo 'The application environment is not set correctly.';
		exit(1); // EXIT_ERROR
}

Ajax Email Send in Codeigniter


// routes

$route['admin/objednavka/send_email'] = "backend/order/send_email";

// html 

<div class="row static-info">
    <div class="col-md-5 name"> Email: </div>
    <input id="user_email" type="hidden" name="user_email" value="getsolved@gmail.com">
</div>

<div class="row static-info">
    <div class="col-md-5 name"> Subject: </div>
    <input id="user_email_sub" type="text" name="user_email_sub" value="getsolved@gmail.com">
</div>

<div class="row static-info">
    <div class="col-md-5 name"> body: </div>
    <textarea id="user_email_body" type="text" name="user_email_body">
    </textarea>
</div>

<div class="row static-info">
    <div class="col-md-5 name"></div>
    <div class="col-md-5 value">  
        <button id="sendOrderEmail">Send Order Email</button>
    </div>
</div>

<div class="row static-info">
    <div class="col-md-5 name"></div>
    <div class="col-md-2" style="display: none;" id="loading">
       <img src="<?= base_url() ?>assets/backend/img/preloader.gif" width="100%">
    </div>
</div>

// jquery 

$("#sendOrderEmail").click(function () {

    var url = $(".url").val();
    var email = $('#user_email').val();
    var user_email_sub= $('#user_email_sub').val();
    var user_email_body= $('#user_email_body').val();

    // alert(email + email_type)
    $.ajax({
        url: url + "admin/objednavka/send_email",
        // url: url + "backend/order/send_email",
        type: 'post',
        data: { 
             'user_email_sub': user_email_sub,  
             'email': email, 
             'user_email_body': user_email_body 
        },
        dataType: 'json',
        beforeSend: function () {
            $("#loading").show();
        },
        success: function (json) {
            
            if (json.success) {
                alert('Email Successfully Sent')
            }
            $("#loading").hide();
            
        },
        error: function (request, status, error) {
            alert("Nepodařilo se změnit.");
            $("#loading").hide();
        }
    });
});

// controller
class Order extends Base_backend
{

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

        $this->load->library('layout');
        $this->layout->title('Objadnávka | Weboo Shop 2.0');
        $this->load->library('form_validation');

        $this->menuOpen->m_order = 1;
    }

    public function sendEmailBackend($to, $subject, $body)
    {
        $sender = $this->setting_model->get_setting("email", "sender", DEFAULT_LANG)->value;
        $senderName = $this->setting_model->get_setting("email", "sender-name", DEFAULT_LANG)->value;

        include_once APPPATH.'/libraries/phpmailer/PHPMailerAutoload.php';
        $mail = new PHPMailer;

        $mail->isSMTP();                            // Set mailer to use SMTP
        $mail->Host = _s("mail-server");            // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;                     // Enable SMTP authentication
        $mail->Username = _s("mail-login");         // SMTP username
        $mail->Password = _s("mail-password");      // SMTP password
        $mail->SMTPSecure = 'ssl';                  // Enable TLS encryption, `ssl` also accepted
        $mail->Port = _s("mail-port");              // TCP port to connect to
        $mail->CharSet = 'UTF-8';
        
        $mail->setFrom(_s("mail-login"), $senderName);
        $mail->addAddress($to);     
        $mail->addReplyTo($sender, $senderName);

        $mail->isHTML(true);                         // Set email format to HTML

        $mail->Subject = $subject;
        $mail->Body = $body;
        $mail->AltBody = $body;
        $mail->send();

        return 1;
    }

    public function send_email()
    {
        $item = $_POST['email_type'];
        $email_text  = $this->b_order_model->get_email_text_by_status($item);

        $email = $_POST['email'];
        $user_email_sub= $_POST['user_email_sub'];
        $user_email_body = $_POST['user_email_body '];

        $status = $this->sendEmailBackend($email,$user_email_sub, $user_email_body );

        echo json_encode(['success' => 1,'status' => $status]);
    }
}

Multiple Image upload jquery plugin in codeigniter

business logic part
(in controller)


   public function edit($id)
    {
        $data['product'] = $this->b_product_model->get_product_detail_with_meta($id, DEFAULT_LANG);
        $data['product_master_img']=$this->b_product_model->get_product_master_image($id);
        $data['product_images']=$this->b_product_model->get_all_images_product_detail($id);
        $data['allkategory'] = $this->b_category_model->get_all_category(DEFAULT_LANG); //All kategorie
        $data['js_list'][] = 'edit_product.js';
        $data['js_list'][] = 'custom_file_upload.js';
        $data['js_to_load'] = array('edit_product.js','custom_file_upload.js');
        
        $this->menuOpen->m_product = 1;
        $this->menuOpen->m_product_all = 1;
        $data['menu'] = $this->menuOpen;
        // $this->layout->view('product/edit_revize2', $data);
        $this->layout->view('product/edit_product', $data);
    }


    /**
     * metoda pro editaci hodnot produktu
     * param id:produktu
     */
    public function edit_action()
    {
            $vystup=$this->b_product_model->update_product(DEFAULT_LANG_ID,DEFAULT_LANG);

        /**
         * vrací typ použitého tlačítk a( save,save and close , no save )
         */
            if($vystup==-1){
            redirect(base_url() . 'admin/produkty');
            }else{
            redirect(base_url() . 'admin/produkt/edit/'.$vystup);
            }
    }

html part …
(in view)

<div class="form-group">
    <label class="control-label col-md-3">Product Other Image</label>
    <div class="col-md-9">
        <div id="picture">
            <div style="display:table;">
                <div class="one-photo">
                    <input id="product_other_image[]" class="fileUpload upload" type="file" name="product_other_image[]" multiple/>
                    <div class="removePhoto">x</div>
                    <i class="fa fa-plus" style="    margin-top: 25px;"></i>
                    <div class="preview"></div>
                </div>

            </div>

            <div class="clear"></div>

        </div>

    </div>
</div>

create and external css

#picture {
    /*display: none;*/
    padding: 10px;
    /*/ / background: #d8d8d8;*/
    /*/ / max-height: 510 px;*/
    /*/ / overflow-y: auto;*/
}

.one-photo .fa-plus {
    margin-top: 35px !important;
    position: absolute;
    top: 25px;
    left: 45%;
}

.removePhoto {
    z-index: 100;
    position: absolute;
    text-align: right;
    margin-right: 5px;
    top: 5px;
    right: 5px;
}

.one-photo {
    text-align: center;
    color: #ccc;
    font-size: 13pt;
}
.one-photo {
    width: 130px;
    height: 130px;
    text-align: center;
    margin-top: 10px;
    border: 2px dashed #ccc;
    color: #ccc;
    font-size: 13pt;
    float: left;
    margin-right: 5px;
    margin-bottom: 5px;
    position: relative;
}

.fileUpload {
    z-index: 10;
    margin-top: 0px;
    opacity: 0;
    height: 100px;
    position: absolute;
}

.fileUpload {
    position: relative;
    overflow: hidden;
    margin: 10px;
}

.preview {
    position: absolute;
    float: left;
    margin-top: -122px;
    width: 130px;
    margin-left: -2px;
    height: 130px;
}

.preview img {
    width: 130px !important;
    height: 130px;
}

create and external javascript file … (assuming jquery and jquery-ui exists)


var nextIndex = 1;

function attachFileReader(fileInput)
{
  if (window.FileReader) {
    var reader = new FileReader();
    reader.onload = function (e) {
      if( $(fileInput).siblings('.preview').html() != "" ){
        // $(fileInput).siblings('.preview').html('');
        $(fileInput).siblings('.preview').html($('<img></img>').attr('src', e.target.result).width(100));
        return;
      }

      $(fileInput).siblings('.preview').append($('<img></img>').attr('src', e.target.result).width(100));
      /*and now add one more*/
      // nextIndex = $('#picture input[type="file"]').size() + 1;
      nextIndex = nextIndex + 1;
      var next = $('<div></div>').addClass('one-photo');
      var preview = $('<div></div>').addClass('preview');
      var icon = $('<i></i>').addClass('fa fa-plus');

      var input = $('<input></input>').attr('type', 'file').addClass('fileUpload').addClass('imageUploads').attr('data-index',nextIndex).attr('name', 'photo[]');
      
      
      var removeThisPicture = $('<div></div>').addClass('removePhoto').html('x').click(function (e)
      {
        if ($('#picture .one-photo').size() > 1) {
          
          if ($(this).parent('.one-photo').children('.preview').html() != "") {
          // if ($('#picture .one-photo .preview').html() != "") {
            // console.log($(this).parent('.one-photo').children('.preview').html());
            console.log($(this).tagName);
            e.preventDefault();
            next.remove();
          }
          
        }else{
          e.preventDefault();
          $('#imageUploads').val('');
          $('#picture').fadeOut(500);
          // $(".one-photo").hide();
        }
      });
      next.append(input);
      next.append(removeThisPicture);
      next.append(icon);
      next.append(preview);
      $(fileInput).parent('.one-photo').after(next);
      input.change(function () {
        attachFileReader(this);
      });
    };
    reader.readAsDataURL($(fileInput) [0].files[0]);
  } 
  else
  {
    var next = $('<div></div>').addClass('one-photo');
    var preview = $('<div></div>').addClass('preview');


    var input = $('<input></input>').attr('type', 'file').addClass('fileUpload').attr('name', 'photo[]');
      

      input.change(function () {
      attachFileReader(this);
    });
      var removeThisPicture = $('<div></div>').addClass('removePhoto').html('x').click(function (e)
      {
        if ($('#picture .one-photo').size() > 1) {
          
          if ($(this).parent('.one-photo').children('.preview').html() != "") {
          // if ($('#picture .one-photo .preview').html() != "") {
            // console.log($(this).parent('.one-photo').children('.preview').html());
            console.log($(this).tagName);
            e.preventDefault();
            next.remove();
          }
          
        }else{
          e.preventDefault();
          $('#imageUploads').val('');
          $('#picture').fadeOut(500);
          // $(".one-photo").hide();
        }
      });
    var icon = $('<i></i>').addClass('fa fa-plus');
    next.append(input);
    next.append(removeThisPicture);
    next.append(icon);
    next.append(preview);
    $(fileInput).parent('.one-photo').after(next);
  }
}

$(document).ready(function ()
{
  $('.removePhoto').click(function ()
  {
    $(this).parent('.one-photo').remove();
  });

  $('.fileUpload').change(function () {
      attachFileReader(this);
    });

});  

now server part php will upload each and every image to the folder..
(in model)


    public function update_product($langid, $lang)
    {
        $this->load->helper('text');


        /* již přiřazené kategorie */
         if(isset($_POST['product_category']) && $_POST['product_category'] != 'un'){
                $id_category = $_POST['product_category'];
         }
         $product_id = $this->input->post('id_product', TRUE);


        $this->product_other_image_upload($product_id, 0);

        return -1;
    }

    public function product_other_image_upload($idproduct, $jeimg = null)
    {
        $num = rand(0,1000);
        
        $sirkaimg = "";
        $vyskaimg = "";
        //get settings pro upload
        $lang = 'CZ';
        $data['general'] = $this->b_setting_model->get_general(DEFAULT_LANG);
        foreach ($data['general'] as $g) {
            if ($g->key == "thumbnail-width") {
                $sirkaimg = $g->value;
            }
            if ($g->key == "thumbnail-height") {
                $vyskaimg = $g->value;
            }
        }
        if (extension_loaded('gd') && function_exists('gd_info')) {
            echo "PHP GD library is installed on your web server";
        } else {
            echo "PHP GD library is NOT installed on your web server";
        }

        if ($_FILES["product_other_image"]["error"][0] == UPLOAD_ERR_OK) {

            $count = count($_FILES['product_other_image']['name']); 

            for($key = 0 ; $key product_thumb($num . $filename, $sirkaimg, $vyskaimg, $num . $filename);
                if ($jeimg == 1) {
                    $this->db->select('f.file_name,f.thumb_name')
                            ->from("file as f");
                    $this->db->where("id_product", $idproduct);
                    $img_kat = $this->db->get();
                    $img_kat_data = $img_kat->row();
                    if ($img_kat_data > 0) {
                        $file_produkt_image = array(
                            "id_file_type" => 'detail_img',
                            "id_product" => $idproduct,
                            "is_active" => 1,
                            "file_name" => "assets/produkt_images/" . $num . $filename,
                            "thumb_name" => "assets/produkt_thumb/" . $num . $filename,
                            "file_description" => 'prodcut other image',
                            "created_by" => 2,
                            'modified_by' => 2
                        );
                        $this->db->where("id_product", $idproduct);
                        $this->db->where("id_file_type", 'detail_img');
                        $this->db->update('file', $file_produkt_image);
                    } else {
                        $file_produkt_image = array(
                            "id_file_type" => 'detail_img',
                            "id_product" => $idproduct,
                            "is_active" => 1,
                            "file_name" => "assets/produkt_images/" . $num . $filename,
                            "thumb_name" => "assets/produkt_thumb/" . $num . $filename,
                            "file_description" => 'prodcut other image',
                            "created_by" => 2,
                            'modified_by' => 2
                        );
                        $this->db->insert('file', $file_produkt_image);
                    }
                } else {
                    $file_produkt_image = array(
                        "id_file_type" => 'detail_img',
                        "id_product" => $idproduct,
                        "is_active" => 1,
                        "file_name" => "assets/produkt_images/" . $num . $filename,
                        "thumb_name" => "assets/produkt_thumb/" . $num . $filename,
                        "file_description" => 'prodcut other image',
                        "created_by" => 2,
                        'modified_by' => 2
                    );
                    $this->db->insert('file', $file_produkt_image);
                }
            }
        }
    }


How to use ajax in Codeigniter view

Welcome to GetSolved !! again .. today we will see how we can “execute queries under the hood” by using ajax in the codeigniter View ..

couple of things may need to add in different secitons. eg. model , controller etc .

// model 

	public function fetch_category(){

		$this->load->model('LabModel');

		$this->LabModel->test_fetch();


		
	}

// view 

       <select class="form-control" id="categoryname" name="categoryname">

       </select>

// javascript 

	$.get("http://localhost/codyii/index.php/lab/fetch_category",{testcategory: 'test'},function(data,status){
		
		$('#categoryname').html(data);
		alert(data);

	});

// controller 

	public function test_fetch(){

		$query = $this->db->get('test_category_entry');
		
		$option = $query->result_array();

		$data = "<select>";
		foreach ($option as $key => $value) {
			$data .= "<option> ". $value['category_name'] . "</option>";
		}
		$data .= "</select>";
		echo $data;

	}