Файл: application/controllers/profile/Home.php
Строк: 2218
<?php
 /**
 * Home controller class
 *
 * Displays User Dashboard page
 *
 * @package        ci_fullcalendar
 * @category    Controller
 * @author        sirdre
 * @link        /profile/home
 */
class Home extends CI_Controller {
    /*
     * Home controller class constructor
     */
    function Home() {
    parent::__construct(); 
    $this->load->model('Fullcalendar_model','calendar');
    $this->load->model('Member_model');
    $this->load->model('gmaps_model');        
    $this->load->model('Eventsources_model');  
    $this->load->model('Page_model');      
    
    $this->load->helper('string');
    $this->load->helper('date');     
    $this->load->helper('security');
    $this->load->helper('form');
    $this->load->helper('url');     
    
    $this->load->library('ion_auth');
    $this->load->library('Languages'); 
    $this->load->library('Icalendar');
    $this->load->library('Notify');
    $this->load->library('form_validation');        
    $this->load->library('upload');
    $this->load->library('image_lib'); 
    // load all settings into an array
    $this->setting = $this->Setting_model->getEverySetting();
    }
    /**
    * Display template
    * This function displays the dashboard
    ****
    * @access public/private
    * @ Param none
    * @return none
    */
    function index() { 
     
        // set the page language, site name, page title, meta keywords and meta description  
        $data['lang'] = $this->setting['site_language'];         
        
        $this->languages->get_lang($data['lang']);
 
        $data['site_name'] = $this->setting['site_name'];
        $data['page_title'] = lang('calendar');
        $data['meta_keywords'] = $this->setting['meta_keywords'];
        $data['meta_description'] = $this->setting['meta_description'];
        $data['key'] = $this->setting['cal_apikey'];   
        $data['current_version'] = $this->setting['current_version'];          
        
        // check if the user is logged in 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
            
            //load the data within view
            $data['userinfo'] = $this->Member_model->getUserById($user->id);    
            $data['pagename'] = $this->Page_model->getAllMembersPages(4, $this->uri->segment(4)); 
    
            
            // if there is a site logo, get the path to the image file
            if ($this->Member_model->userImageExists( $data['userinfo']->image,  $data['userinfo']->id) !== '') {
                $data['current_logo'] = base_url().'assets/img/profile/'. $data['userinfo']->image;;
            } else {
                // no logo so leave it blank
                $data['current_logo'] = base_url().'assets/img/profile/default.png';
            }    
     
            debug('Initialize index - loading "home/index" view');
            $sections = array('body_content' => $this->setting['current_theme'] . '/backend/home/index', 'nav_content' => $this->setting['current_theme'] . '/backend/home/nav', 'header_content' => $this->setting['current_theme'] . '/backend/home/header', 'footer_content' => $this->setting['current_theme'] . '/backend/home/footer');
            $this->template->load($this->setting['current_theme'] . '/backend/masterpage', $sections, $data);
  
        } else {
            // user not found, redirect to users list
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        } 
    }
    
   /**
    * import - events are saved in ics format
    *
    ****
    * @access public
    * @ Param none
    * @ Return string with the last query 
    */            
    public function upload_file() {
        debug('Initialize upload - loading "home/upload_file" uploading ICS files');
        // check user is logged in with permissions   
        
         if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
        
            $user = $this->ion_auth->user()->row();
            
            $userinfo = $this->Member_model->getUserById($user->id);
         
            $status = "";
            $msg = "";
            $file_element_name = 'userfile';  
            
            if ($status != "error")   {
           
                $config['upload_path']    = $this->setting['sync_path_location'];
                $config['allowed_types']= $this->setting['sync_allowed_extension'];  
                $config['max_size']        = $this->setting['sync_max_size'];
                $config['encrypt_name'] = FALSE;  
                $this->upload->initialize($config);
                if (!$this->upload->do_upload($file_element_name))    {
                
                     $status = 'error';
                     $msg = $this->upload->display_errors('', '');
                
                }else {
                
                    $data = $this->upload->data();
                    $filename = $_FILES['userfile']['tmp_name'];
                     
                    $this->calendar->import($userinfo->username, $this->icalendar->parseFile($filename));                     
                }
                @unlink($_FILES[$file_element_name]);
            }
            
        }else {
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301); 
        }               
   }    
     
   /**
    * export - Export specific event in ics format
    *
    ****
    * @access public
    * @ Param none
    * @ Return string with the last query 
    */        
    function export($id) {        
        // set the page language, site name, page title, meta keywords and meta description  
        $data['lang'] = $this->setting['site_language'];         
        
        $this->languages->get_lang($data['lang']);
        
        $data['site_name'] = $this->setting['site_name'];
        $data['page_title'] = lang('calendar');
        $data['meta_keywords'] = $this->setting['meta_keywords'];
        $data['meta_description'] = $this->setting['meta_description'];  
        $data['key'] = $this->setting['cal_apikey'];
        $data['current_version'] = $this->setting['current_version']; 
        
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {            
            
            $user = $this->ion_auth->user()->row();
        
            $userinfo = $this->Member_model->getUserById($user->id);
          
            debug('Initialize export - loading "home/index" ics export'); 
            $filename = $userinfo->username . "_export_". now() .".ics";
            header("Content-type:text/calendar");
            header("Content-Disposition: attachment; filename=$filename");  
            
            $timezone = $this->setting['site_timezone']; 
            echo $this->calendar->export($userinfo->username, $id, $timezone, $data['lang']); 
        
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }       
    
    /**
    * export_all - All events are saved in ics format by each member
    *
    ****
    * @access public
    * @ Param none
    * @ Return string with the last query 
    */        
    function export_all() {        
        // set the page language, site name, page title, meta keywords and meta description  
        $data['lang'] = $this->setting['site_language'];         
        
        $this->languages->get_lang($data['lang']);
        
        $data['site_name'] = $this->setting['site_name'];
        $data['page_title'] = lang('calendar');
        $data['meta_keywords'] = $this->setting['meta_keywords'];
        $data['meta_description'] = $this->setting['meta_description']; 
        $data['key'] = $this->setting['cal_apikey'];
        $data['current_version'] = $this->setting['current_version']; 
        
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
        
            $userinfo = $this->Member_model->getUserById($user->id);
          
            debug('Initialize export - loading "home/index" ics export'); 
            $filename = $userinfo->username . "_export_". now() .".ics";
            header("Content-type:text/calendar");
            header("Content-Disposition: attachment; filename=$filename");  
            
            $timezone = $this->setting['site_timezone']; 
            echo $this->calendar->export($userinfo->username, 0, $timezone, $data['lang']); 
        
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
        
    /**
    * search - query events by title
    *
    ****
    * @access public
    * @ Param none
    * @ Return string with the last query 
    */        
    function search() {
        // check user is logged in with permissions  
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            $title = $this->security->xss_clean($this->input->get('title'));  
            echo $this->calendar->search_private($title, $user->username); 
          
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }        
    
    }    
    /**
    * get_usergroups events and shows
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function get_usergroups()    {       
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
            // pass the user group to the view
            $usergroups = $this->ion_auth->get_users_groups($user->id)->result(); 
            
            echo json_encode($usergroups);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_groups events and shows
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function get_groups()    {       
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
            // pass the user group to the view
            $groups = $this->ion_auth->groups()->result_array(); 
            
            echo json_encode($groups);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_marker events and shows
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_marker() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            $category = $this->security->xss_clean($this->input->get('category'));
            $marker = $this->gmaps_model->get($category, $user->username);
            
            echo json_encode($marker);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }
    
    /**
    * get_category events and shows
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function get_category()    {       
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
          
            $category = $this->calendar->category($user->username);
            
            echo json_encode($category);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }
    
     /**
    * get_eventsource get the list of 20 event sources
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function get_eventsource() {          
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();  
            $category = $this->Eventsources_model->getSourceList(20,0,$user->username);
            echo json_encode($category);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
     /**
    * get_lang events and shows
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_lang() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();  
            echo json_encode($user->lang);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }     
    
    /**
    * get_timezone events and shows
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_timezone() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();  
            $datetime = new DateTime('now', new DateTimeZone($user->cal_timezone));
            $datetime_string = $datetime->format('c'); 
            
            echo json_encode($datetime_string);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }
    /**
    * get_timezone2 get timezone string
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_timezone2() {  
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();  
            echo json_encode($user->cal_timezone);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_coordinate - get longitude, latitude string
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_coordinate() {       
            
        $latitude = $this->setting['site_latitude']; 
        $longitude = $this->setting['site_longitude'];  
        $coordinate = $latitude.",".$longitude; 
        echo json_encode($coordinate); 
    }
    
    /**
    * get_defaultview events and shows
    * This function is called to specify calendar default view.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_defaultview() {  
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_defaultview);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_header_left - headers buttons
    * This function is called to specify calendar default header_left.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_header_left() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_header_left);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }
    
    /**
    * get_header_center - headers buttons
    * This function is called to specify calendar default header_center.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_header_center() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_header_center);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_header_right - headers buttons
    * This function is called to specify calendar default header right.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_header_right() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_header_right);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_hiddenDays - calendar preference
    * This function is called to specify calendar default hiddenDays.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_hiddendays() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();      
            echo json_encode($user->cal_hiddendays);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_firstday - calendar preference
    * This function is called to specify calendar default hiddenDays.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_firstday() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();     
            echo json_encode($user->cal_firstday);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_businessstart - calendar preference
    * This function is called to specify calendar default hiddenDays.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_businessstart() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_businessstart);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_businessend - calendar preference
    * This function is called to specify calendar default hiddenDays.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_businessend() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_businessend);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_businessdays - calendar preference
    * This function is called to specify calendar default hiddenDays.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_businessdays() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_businessdays);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_editable - calendar preference
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_editable() {     
    
            $editable = $this->setting['cal_editable'];      
            echo json_encode($editable); 
    }    
    
    /**
    * get_weeknumbers - calendar preference
    * This function is called to specify calendar default weeknumbers.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_weeknumbers() {  
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_weeknumbers);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_eventlimit - calendar preference
    * This function is called to specify calendar default eventlimit.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_eventlimit() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_eventlimit);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }
        
    /**
    * get_alldayslot - calendar preference
    * This function is called to specify calendar default alldayslot.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_alldayslot() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_alldayslot);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
    /**
    * get_slotduration - calendar preference
    * This function is called to specify calendar default view for slot duration.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_slotduration() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_slotduration);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_slotlabeling - calendar preference
    * This function is called to specify calendar default view for slot labeling.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_slotlabeling() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();  
            echo json_encode($user->cal_slotlabeling);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_aspectratio - calendar preference
    * This function is called to specify calendar default view for slot duration.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_aspectratio() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_aspectratio);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }        
    
    /**
    * get_isrtl - calendar preference
    * This function is called to specify calendar default isrtl.
    ****
    * @access public
    * @ Param none
    * @return none
    */
     public function get_isrtl() { 
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            echo json_encode($user->cal_isrtl);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }    
    
     /**
    * json - Generates events by users
    * This function is called to specify multiple event sources.
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function json () {       
        header("Content-Type: application/json");         
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            $this->calendar->jsonEvents($user);
        
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }            
    }
 
    
    /**
    * Generates get events by users and category
    * This function is called to specify multiple event categories.
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function jsoncat ( )  {       
    
        header("Content-Type: application/json");         
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();     
            $category = $this->security->xss_clean($this->input->get('category')); 
            $this->calendar->jsonEventsCategory($category, $user->username);
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }            
        
    }    
    /**
    * get_eventsgroups display user groups
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function jsongroups()    {       
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
            // pass the user group to the view
            $group = $this->security->xss_clean($this->input->get('group')); 
            echo $this->calendar->jsonEventsGroups($group, $user); 
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }
    
    /**
    * resize
    * This function is triggered when resizing stops and the event has changed in duration.
    ****
    * @access public
    * @ Param none
    * @return none
    */
    public function resize() {
        header("Content-Type: application/json");  
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
         
            $rec = '';
            $endrecurring = ''; 
        
        
            $data = array(
                'event'         =>  $this->security->xss_clean($this->input->post('event')),
                'daystart'      =>  $this->security->xss_clean($this->input->post('daystart')),
                'dayend'        =>  $this->security->xss_clean($this->input->post('dayend')),
                'allDay'        =>  $this->security->xss_clean($this->input->post('allDay')), 
            );            
            
            $event = $this->calendar->get_eventById($data['event']);
            
            if(!empty($event)){
            $rec=(int)$event->recurdays;  
            $endrecurring=$event->recurend; 
            }
            
            if($endrecurring && $rec==1 || $rec==7 || $rec==14 || $rec==30 || $rec==365){
             $start_date = strtotime($data['daystart']);
             $end_date = strtotime($data['dayend']);
             
             $length=(int)$end_date-$start_date;
             list($y,$m,$d) = explode('-',$endrecurring);
             $end_date=mktime(23,59,59,$m,$d,$y);
             $step=3600*24*$rec;
              
                 $this->calendar->delete_event($event->id);
                 
        
                if($rec==1 || $rec==7 || $rec==14 || $rec == 365) {
                    $step=3600*24*$rec; 
                    
                    for($i=$start_date;$i<=$end_date;$i+=$step){    
                        $data['start']=date('Y-m-d H:i:s',$i);
                        $data['end']=date('Y-m-d H:i:s',$i+$length);  
                
                        $this->calendar->add_event($event->id, $event->title, $event->category, $event->backgroundColor, $event->borderColor, $event->textColor, $event->description, $data['start'], $data['end'], $event->url, $data['allDay'], $event->rendering, $event->overlap, $event->recurdays, $event->recurend, $event->gid, $event->location,  $event->latitude, $event->longitude, $user->username);
            
                    }
                }else if($rec == 30) {
                    for($i=$start_date;$i<=$end_date;$i+=3600*24*(int)date('t', mktime(0, 0, 0, (int)date('m',$i), 1, (int)date('y',$i)))){    
                        $data['start']=date('Y-m-d H:i:s',$i);
                        $data['end']=date('Y-m-d H:i:s',$i+$length);   
                    
                        $this->calendar->add_event($event->id, $event->title, $event->category, $event->backgroundColor, $event->borderColor, $event->textColor, $event->description, $data['start'], $data['end'], $event->url, $data['allDay'], $event->rendering, $event->overlap, $event->recurdays, $event->recurend, $event->gid, $event->location,  $event->latitude, $event->longitude, $user->username);
                    }
                }                  
         
                
            }else{ 
                
               echo $this->calendar->resize($data);    
            
            }
        
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }        
        
         
    }
 
  
    /**
    * drop_event
    * This function triggered when dragging stops and the event has moved to a different day/time.
    ****
    * @access public
    * @ Param none
    * @return none
    */
   public function drop_event ( )  {
        header("Content-Type: application/json");  
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row(); 
            
            $rec = '';
            $endrecurring = ''; 
            
            $data = array(
                'event'         =>  $this->security->xss_clean($this->input->post('event')),
                'daystart'      =>  $this->security->xss_clean($this->input->post('daystart')),
                'dayend'        =>  $this->security->xss_clean($this->input->post('dayend')),
                'allDay'        =>  $this->security->xss_clean($this->input->post('allDay')),
            );            
            $event = $this->calendar->get_eventById($data['event']);
            
            if(!empty($event)) {
            $rec=(int)$event->recurdays;  
            $endrecurring=$event->recurend; 
            }
                
            if($endrecurring && $rec==1 || $rec==7 || $rec==14 || $rec==30 || $rec==365){
             $start_date = strtotime($data['daystart']);
             $end_date = strtotime($data['dayend']);
             
             $length=(int)$end_date-$start_date;
             list($y,$m,$d) = explode('-',$endrecurring);
             $end_date=mktime(23,59,59,$m,$d,$y); 
              
                 $this->calendar->delete_event($event->id);
            
                if($rec==1 || $rec==7 || $rec==14 || $rec == 365) {
                    $step=3600*24*$rec; 
                    
                    for($i=$start_date;$i<=$end_date;$i+=$step){    
                        $data['start']=date('Y-m-d H:i:s',$i);
                        $data['end']=date('Y-m-d H:i:s',$i+$length);  
                
                        $this->calendar->add_event($event->id, $event->title, $event->category, $event->backgroundColor, $event->borderColor, $event->textColor, $event->description, $data['start'], $data['end'], $event->url, $data['allDay'], $event->rendering, $event->overlap, $event->recurdays, $event->recurend, $event->gid, $event->location,  $event->latitude, $event->longitude, $user->username);
            
                    }
                }else if($rec == 30) {
                    for($i=$start_date;$i<=$end_date;$i+=3600*24*(int)date('t', mktime(0, 0, 0, (int)date('m',$i), 1, (int)date('y',$i)))){    
                        $data['start']=date('Y-m-d H:i:s',$i);
                        $data['end']=date('Y-m-d H:i:s',$i+$length);   
                    
                        $this->calendar->add_event($event->id, $event->title, $event->category, $event->backgroundColor, $event->borderColor, $event->textColor, $event->description, $data['start'], $data['end'], $event->url, $data['allDay'],  $event->rendering, $event->overlap, $event->recurdays, $event->recurend, $event->gid, $event->location,  $event->latitude, $event->longitude, $user->username);
                    }
                }         
              
                
            }else{  
                echo $this->calendar->drop_event($data); 
            }
        
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }            
        
        
    }
 
    /**
    * drag_event
    * This function is called when a valid jQuery UI draggable has been dropped onto the calendar.
    ****
    * @access public
    * @ Param none
    * @return none
    */
   public function drag_event ( )  {
        header("Content-Type: application/json");  
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();            
             
            $eventid = random_string('numeric', 7);
            $event = $this->calendar->get_eventById($eventid);  
            if(!$event){ 
                $data = array(
                    'id'         =>  $this->security->xss_clean($eventid), 
                    'username'   =>  $this->security->xss_clean($user->username),
                    'category'   =>  $this->security->xss_clean($this->input->post('category')),
                    'title'      =>  $this->security->xss_clean($this->input->post('title')),
                    'description'      =>  $this->security->xss_clean($this->input->post('description')),
                    'rendering'      =>  $this->security->xss_clean($this->input->post('rendering')),
                    'backgroundColor'  =>  $this->security->xss_clean($this->input->post('backgroundColor')),
                    'borderColor'      =>  $this->security->xss_clean($this->input->post('borderColor')),
                    'textColor'        =>  $this->security->xss_clean($this->input->post('textColor')),
                    'start'      =>  $this->security->xss_clean($this->input->post('start')),
                    'end'        =>  $this->security->xss_clean($this->input->post('end')),
                    'allDay'     =>  $this->security->xss_clean($this->input->post('allDay'))
                );
                echo $this->calendar->drag_drop_event($data); 
            }
         
        
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }            
        
        
    }
    /**
    * Deletes the event
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */ 
    public function delete_event() {
        
        $data['lang'] = $this->setting['site_language'];         
        
        $this->languages->get_lang($data['lang']);        
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
                  
            $username = $user->username;            
            $data["message"] = "";
            
            $config = array(
                array(
                    'field' => 'ic_event_title',
                    'label' => lang('calendar_modal_eventname'),
                    'rules' => 'trim|xss_clean'
                ),    
                array(
                    'field' => 'ic_event_starttime',
                    'label' => lang('calendar_modal_eventbegin'),
                    'rules' => 'trim|required|xss_clean'
                ),
                array(
                    'field' => 'ic_event_endtime',
                    'label' => lang('calendar_modal_eventend'),
                    'rules' => 'trim|required|xss_clean'
                ),                
                array(
                    'field' => 'apptID',
                    'label' => lang('calendar_modal_eventname'),
                    'rules' => 'trim|required|numeric|xss_clean'
                ),  
                array(
                    'field' => 'userfile1',
                    'label' => lang('attach'),
                    'rules' => 'trim'
                )                 
            );
            $this->form_validation->set_error_delimiters('', '');
            $this->form_validation->set_rules($config);
            
            if ($this->form_validation->run() === FALSE) { 
                
                    debug('Initialize validation - loading "profile/home" fields requirement');
                    $data['message'] = form_error('ic_event_title'); 
                     
            } else {        
                $event = $this->security->xss_clean($this->input->post('apptID'));  
                $this->calendar->delete_event($event);        
            }
            
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
    }   
    
   /**
    * Add the event
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */    
    function add_event()   { 
 
         $data['lang'] = $this->setting['site_language'];         
        
        $this->languages->get_lang($data['lang']);
        
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
                   
            $lang = $user->lang;
            $username = $user->username;
            $status = "";
            $data["message"] = "";
            
            $config = array(
                array(
                    'field' => 'ic_event_title',
                    'label' => lang('calendar_modal_eventname'),
                    'rules' => 'trim|required|min_length[3]|max_length[90]|xss_clean'
                ),
                array(
                    'field' => 'ic_event_desc',
                    'label' => lang('calendar_modal_description'),
                    'rules' => 'trim|max_length[1000]|xss_clean'
                ),
                array(
                    'field' => 'marker_category',
                    'label' => lang('calendar_modal_category'),
                    'rules' => 'trim|required|xss_clean'
                ),
                array(
                    'field' => 'ic_event_starttime',
                    'label' => lang('calendar_modal_eventbegin'),
                    'rules' => 'trim|required|xss_clean'
                ),
                array(
                    'field' => 'ic_event_endtime',
                    'label' => lang('calendar_modal_eventend'),
                    'rules' => 'trim|required|xss_clean'
                ),
                array(
                    'field' => 'ic_event_urllink',
                    'label' => lang('calendar_modal_eventend'),
                    'rules' => 'trim|prep_url|xss_clean'
                ),
                array(
                    'field' => 'ic_event_shareit',
                    'label' => lang('calendar_modal_eventshare'),
                    'rules' => 'trim|required|numeric|xss_clean'
                ),
                array(
                    'field' => 'userfile1',
                    'label' => lang('attach'),
                    'rules' => 'trim'
                )                 
            );
            $this->form_validation->set_error_delimiters('', '');
            $this->form_validation->set_rules($config);
            
            if ($this->form_validation->run() === FALSE) { 
                
                   debug('Initialize validation - loading "profile/home" fields requirement');
                   $data['message'] = form_error('ic_event_title'); 
                     
            } else {
 
                setlocale(LC_ALL, $lang);  
                $id = random_string('numeric', 8);
                $title = $this->input->post('ic_event_title'); 
                $marker_category = $this->input->post('marker_category'); 
                $backgroundColor = $this->input->post('ic_event_bgcolor');
                $borderColor = $this->input->post('ic_event_textcolor');
                $textColor = $this->input->post('ic_event_bordercolor');
                $description = $this->input->post('ic_event_desc');
                $start = strftime('%Y-%m-%d %H:%M:%S', $this->languages->langtotime($this->input->post('ic_event_starttime'), $lang));
                $end =  strftime('%Y-%m-%d %H:%M:%S', $this->languages->langtotime($this->input->post('ic_event_endtime'), $lang));
                $url = $this->input->post('ic_event_urllink');
                $allDay = $this->input->post('ic_event_allday');            
                $rendering = $this->input->post('ic_event_rendering'); 
                $recurring = $this->input->post('ic_event_recurring'); 
                $endrecurring = $this->input->post('ic_event_endrecurring'); 
                $auth = $this->input->post('ic_event_shareit');
                $overlap = $this->input->post('ic_event_eventoverlap'); 
                $location = $this->input->post('ic_event_location');
                $markers_lat = $this->input->post('markers_clat');
                $markers_lng = $this->input->post('markers_clng');
                             
                $markers_logo = "pin2.png";
                 
                if($rendering == "background") {$allDay = "true";}
                                
                $rec=(int)$recurring;  
                
                if($endrecurring && $rec==1 || $rec==7 || $rec==14 || $rec==30 || $rec==365){
                 $start_date = $this->languages->langtotime($start, $lang);
                 $end_date = $this->languages->langtotime($end, $lang);
                              
                 $length=(int)$end_date-$start_date;
                 list($y,$m,$d) = explode('-',$endrecurring);
                 $end_date=mktime(23,59,59,$m,$d,$y);
                 
     
                    if($rec==1 || $rec==7 || $rec==14 || $rec == 365) {
                        $step=3600*24*$rec; 
                        
                        for($i=$start_date;$i<=$end_date;$i+=$step){    
                            $data['start']=date('Y-m-d H:i:s',$i);
                            $data['end']=date('Y-m-d H:i:s',$i+$length);  
                            
                            $this->calendar->add_event($id, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $data['start'], $data['end'], $url, $allDay, $rendering, $overlap, $recurring, $endrecurring, $auth, $location, $markers_lat, $markers_lng, $username);
                                    
                        }
                    }else if($rec == 30) {
                        for($i=$start_date;$i<=$end_date;$i+=3600*24*(int)date('t', mktime(0, 0, 0, (int)date('m',$i), 1, (int)date('y',$i)))){    
                            $data['start']=date('Y-m-d H:i:s',$i);
                            $data['end']=date('Y-m-d H:i:s',$i+$length);  
                            
                            $this->calendar->add_event($id, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $data['start'], $data['end'], $url, $allDay, $rendering, $overlap, $recurring, $endrecurring, $auth, $location, $markers_lat, $markers_lng, $username);
                                    
                        }
                    }     
                 
                    $this->gmaps_model->add_marker($marker_category, $id, $username, $title, $markers_logo, $location, $markers_lat, $markers_lng, $url, $description );
 
                }else{
                     
                    $this->calendar->add_event($id, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $start, $end, $url, $allDay, $rendering, $overlap, $recurring, $endrecurring, $auth, $location, $markers_lat, $markers_lng, $username);
                    
                    $this->gmaps_model->add_marker($marker_category, $id, $username, $title, $markers_logo, $location, $markers_lat, $markers_lng, $url, $description );
                 }
            
                $file_element_name = 'userfile1'; 
                if ($status != "error" && !$this->input->post('userfile1'))   {
               
                    $config['upload_path']    = './assets/attachments/';
                    $config['file_name']    = $username.'_'.$_FILES['userfile1']['name'];
                    $config['allowed_types']= $this->setting['attach_allowed_extension'];  
                    $config['max_size']        = $this->setting['attach_max_size'];
                    $config['xss_clean']    = FALSE;
                    $config['encrypt_name'] = FALSE;
                    $this->upload->initialize($config);
                    if (!$this->upload->do_upload($file_element_name))    {
                    
                         $status = 'error';
                         $data["message"] = $this->upload->display_errors('', '');
                    
                    }else {
                    
                        debug('Initialize upload - loading "home/index" attachment upload');                         
                        $file_data = $this->upload->data();             
                        $this->calendar->attachment($id, $file_data['file_name']);  
                        
                    }
                    @unlink($_FILES[$file_element_name]['name']);
                }
                if($auth < "0") {$this->notify->notify_admins('notify_message', $username, lang('notify_email_public_event'));}                
      
            }
                   
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
      
    }
     
    /**
    * Update the event
    * This function is called from calendar.custom.js
    ****
    * @access public
    * @ Param none
    * @return none
    */    
   function update_event() {
 
         $data['lang'] = $this->setting['site_language'];         
        
        $this->languages->get_lang($data['lang']);
        // check user is logged in with permissions 
        if ($this->ion_auth->logged_in() || $this->ion_auth->is_admin()) {
            
            $user = $this->ion_auth->user()->row();
             
            $lang = $user->lang;
            $username = $user->username;
            $status = "";
            $data['message'] = ""; 
  
            $config = array(
                array(
                    'field' => 'ic_event_title',
                    'label' => lang('calendar_modal_eventname'),
                    'rules' => 'trim|required|min_length[3]|max_length[90]|xss_clean'
                ),
                array(
                    'field' => 'ic_event_desc',
                    'label' => lang('calendar_modal_description'),
                    'rules' => 'trim|max_length[1000]|xss_clean'
                ),
                array(
                    'field' => 'ic_event_starttime',
                    'label' => lang('calendar_modal_eventbegin'),
                    'rules' => 'trim|required|xss_clean'
                ),
                array(
                    'field' => 'ic_event_endtime',
                    'label' => lang('calendar_modal_eventend'),
                    'rules' => 'trim|required|xss_clean'
                ),
                array(
                    'field' => 'ic_event_urllink',
                    'label' => lang('calendar_modal_eventend'),
                    'rules' => 'trim|prep_url|xss_clean'
                ),
                array(
                    'field' => 'ic_event_shareit2',
                    'label' => lang('calendar_modal_eventshare'),
                    'rules' => 'trim|required|numeric|xss_clean'
                ),
                array(
                    'field' => 'userfile2',
                    'label' => lang('attach'),
                    'rules' => 'trim'
                ) 
            );
            $this->form_validation->set_error_delimiters('', '');
            $this->form_validation->set_rules($config);
            
            if ($this->form_validation->run() === FALSE) { 
            
                debug('Initialize validation - loading "profile/home" fields requirement');
                $data['message'] = form_error('ic_event_title'); 
                     
            } else {     
        
                setlocale(LC_ALL, $lang);   
                $id = random_string('numeric', 9);  
                $event = $this->input->post('apptID'); 
                $title = $this->input->post('ic_event_title');
                $backgroundColor = $this->input->post('ic_event_bgcolor');
                $borderColor = $this->input->post('ic_event_textcolor');
                $textColor = $this->input->post('ic_event_bordercolor');
                $description = $this->input->post('ic_event_desc'); 
                $start = strftime('%Y-%m-%d %H:%M:%S', $this->languages->langtotime($this->input->post('ic_event_starttime'), $lang));
                $end =  strftime('%Y-%m-%d %H:%M:%S', $this->languages->langtotime($this->input->post('ic_event_endtime'), $lang));
                $url = $this->input->post('ic_event_urllink');
                $allDay = $this->input->post('ic_event_allday');
                $auth = $this->input->post('ic_event_shareit2');
                $rendering = $this->input->post('ic_event_rendering');
                $overlap = $this->input->post('ic_event_eventoverlap');
                $recurring = $this->input->post('ic_event_recurring'); 
                $endrecurring = $this->input->post('ic_event_endrecurring');             
                $location = $this->input->post('ic_event_location');
                $markers_lat = $this->input->post('markers_ulat');
                $markers_lng = $this->input->post('markers_ulng');            
                $marker_category = $this->input->post('marker_category2');  
                $markers_logo = "pin3.png";
  
                $file_element_name = 'userfile2'; 
                if ($status != "error")   {
               
                    $config['upload_path']    = './assets/attachments/';
                    $config['file_name']    = $username.'_'.$_FILES['userfile2']['name'];
                    $config['allowed_types']= $this->setting['attach_allowed_extension'];  
                    $config['max_size']        = $this->setting['attach_max_size'];
                    $config['xss_clean']    = FALSE;
                    $config['encrypt_name'] = FALSE; 
                    $this->upload->initialize($config);
                    if (!$this->upload->do_upload($file_element_name))    {
                    
                         $status = 'error'; 
                         $data["message"] = $this->upload->display_errors('', '');
                    
                    }else {
                    
                        debug('Initialize upload - loading "home/index" attachment upload');   
                    
                        $data = $this->upload->data();            
                            
                        $this->calendar->attachment($event, $data['file_name']); 
                        
                    }
                    @unlink($_FILES[$file_element_name]['name']);
                }                
                
                 
                if($rendering == "background") {$allDay = "true";}
                                
                $rec=(int)$recurring; 
                
                if($endrecurring && $rec==1 || $rec==7 || $rec==14 || $rec==30 || $rec==365){
                 $start_date = $this->languages->langtotime($start, $lang);
                 $end_date = $this->languages->langtotime($end, $lang);
                 
                 $length=(int)$end_date-$start_date;
                 list($y,$m,$d) = explode('-',$endrecurring);
                 $end_date=mktime(23,59,59,$m,$d,$y); 
                 
                    if ($this->calendar->get_eventById($event)){
                     $this->calendar->delete_event($event);
                        if($rec==1 || $rec==7 || $rec==14 || $rec == 365) {
                            $step=3600*24*$rec; 
                            
                            for($i=$start_date;$i<=$end_date;$i+=$step){    
                                $data['start']=date('Y-m-d H:i:s',$i);
                                $data['end']=date('Y-m-d H:i:s',$i+$length);  
                                
                                $this->calendar->add_event($event, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $data['start'], $data['end'], $url, $allDay, $rendering, $overlap, $recurring, $endrecurring, $auth, $location, $markers_lat, $markers_lng, $username);            
                            }
                        }else if($rec == 30) {
                            for($i=$start_date;$i<=$end_date;$i+=3600*24*(int)date('t', mktime(0, 0, 0, (int)date('m',$i), 1, (int)date('y',$i)))){    
                                $data['start']=date('Y-m-d H:i:s',$i);
                                $data['end']=date('Y-m-d H:i:s',$i+$length);  
                                
                                $this->calendar->add_event($event, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $data['start'], $data['end'], $url, $allDay, $rendering, $overlap, $recurring, $endrecurring, $auth, $location, $markers_lat, $markers_lng, $username);
                                        
                            }
                        }     
                     
                    }
                 
                    if ($this->gmaps_model->get_markersById($event)){
                        $this->gmaps_model->update_marker($marker_category, $event, $username, $title, $markers_logo, $location, $markers_lat, $markers_lng, $url, $description);
                    }else {
                       if ($this->calendar->get_eventById($event)){
                            $this->gmaps_model->add_marker($marker_category, $event, $username, $title, $markers_logo, $location, $markers_lat, $markers_lng, $url, $description );
                        }
                    }                
                         
                    
                }else{
                     
                     if ($this->calendar->get_eventById($event)){
                        $this->calendar->update_event($event, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $start, $end, $url, $allDay, $auth, $rendering, $overlap, $location, $markers_lat, $markers_lng, $username);
                     }else{
                        $this->calendar->add_event($id, $title, $marker_category, $backgroundColor, $borderColor, $textColor, $description, $start, $end, $url, $allDay, $rendering, $overlap, $recurring, $endrecurring, $auth, $location, $markers_lat, $markers_lng, $username);
                     }    
                        if ($this->gmaps_model->get_markersById($event)){
                            $this->gmaps_model->update_marker($marker_category, $event, $username, $title, $markers_logo, $location, $markers_lat, $markers_lng, $url, $description);
                        }else {
                           if ($this->calendar->get_eventById($event)){
                                $this->gmaps_model->add_marker($marker_category, $event, $username, $title, $markers_logo, $location, $markers_lat, $markers_lng, $url, $description );
                            }
                        }         
                }             
                if($auth < "0") {$this->notify->notify_admins('notify_message', $username, lang('notify_email_public_event'));}
            }    
    
        }else {            
            debug('Initialize index - loading "login/index" view');
            redirect('/profile/login', 301);
        }
      
    }
    
}
/* End of file home.php (cifullcalendar+) */
/* Location: ./application/controllers/profile/home.php */