Sindbad~EG File Manager

Current Path : /var/www/html/digi.sumar.com.py/wp-content/plugins/wp-job-portal/modules/resume/
Upload File :
Current File : /var/www/html/digi.sumar.com.py/wp-content/plugins/wp-job-portal/modules/resume/model.php

<?php

if (!defined('ABSPATH'))
    die('Restricted Access');

class WPJOBPORTALResumeModel {


    function getResumePercentage( $resumeid ){
        if(!is_numeric($resumeid))  return false;
        // get published sections first
        $list = $this->getPublishedSectionsList();
        $sections_status = array();
        foreach ($list as $key => $value) {
            $field = $value->field;
            $field = wpjobportalphplib::wpJP_explode('_', $field);
            $sections_status[$value->section] = array('name' => $field[1] , 'id' => $value->section, 'status' => 0);
        }
        // percentage fo personal section
        $percentage = 40;
        $number_of_sections = (int) count($list);
        if($number_of_sections == 0){
            $section_percentage = 0;
            $percentage = 100;
        }else{
            // how much percnetage will a section reprsent
            $section_percentage = 60 / $number_of_sections;
        }

        foreach ($sections_status as $key => $section) {
            if($section['id'] == 5 || $section['id'] == 6){
                $field = 'skills';
                if($section['id'] == 6) $field = 'resume';
                $query = "SELECT $field FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE `id` = ".esc_sql($resumeid);
                $result = wpjobportal::$_db->get_var($query);
                if($result !=''){
                    $sections_status[$key]['status'] = 1;
                    $percentage = $percentage + $section_percentage;// section is filled add the section percentage to total
                }else{
                    // check their params now
                    $query = "SELECT params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE `id` = ".esc_sql($resumeid);
                    $result = wpjobportal::$_db->get_var($query);
                    if($result != '' ){
                        $params = json_decode($result , true);
                        $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , $section['id']);
                        foreach($fields AS $field){
                            if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                                $sections_status[$key]['status'] = 1;
                                $percentage = $percentage + $section_percentage;// section is filled add the section percentage to total
                                break; // get out of this loop only counting it once. not for every custom field of a section
                            }
                        }
                    }
                }
            }else{
                $table_name = 'resume' . $section['name'] . 's';
                if ($section['id'] == 2)
                    $table_name = 'resume' . $section['name'] . 'es';
                // section name in field ordering education, table name is still institutes
                if($section['name'] == 'education'){
                    $table_name = 'resume' .'institutes';
                }
                $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_".esc_sql($table_name)."` WHERE `resumeid` = ".esc_sql($resumeid);
                $count = wpjobportal::$_db->get_var($query);
                if($count != '' && $count > 0){
                    $sections_status[$key]['status'] = 1;
                    $percentage = $percentage + $section_percentage;// section is filled add the section percentage to total
                }
            }
        }
        //$filled_sections = 0;

/*
    // functionality of this code is handled above now.
        foreach ($sections_status as $key => $value) {
            if($value['status'] == 1)
                $filled_sections += 1;
        }
        if(empty($sections_status)){
            $total = 0;
        }else{
            $total = count($sections_status);
        }
        if($total > 0){
            $others = 75 / $total;
            $total_fill = 0;
            for ($i=1; $i < $filled_sections; $i++) {
                $total_fill += $others;
            }
            if($total_fill > 0){
                $percentage = 25 + $total_fill;
                $percentage = round($percentage);
            }else{
                $percentage = 25;
            }
        }else{
            $percentage = 100;
        }
*/

        $sections_status['percentage'] = (int) round($percentage);
        return $sections_status;
    }
    function getPublishedSectionsList(){
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        if ($uid != 0)
            $published = '`published` = 1';
        else
            $published = '`isvisitorpublished` = 1';
        //'section_institute','section_skills', 'section_language'
        // section_institute has been changed to section_education in database table
        if(in_array('advanceresumebuilder', wpjobportal::$_active_addons)){
            $frp = " ,'section_education','section_skills', 'section_language'";
        }else{
            $frp = "";
        }
        $query = "SELECT field , section FROM `" . wpjobportal::$_db->prefix . "wj_portal_fieldsordering` WHERE `field` IN('section_address',  'section_employer'$frp) AND ".esc_sql($published)." AND `fieldfor` = 3";
        $fields = wpjobportal::$_db->get_results($query);
        return $fields;
    }

    /* new code for resume start */

    function storeResume($data,$uid=''){
        if (empty($data)) return false;
        if (!$this->captchaValidate()) {
            WPJOBPORTALMessages::setLayoutMessage(esc_html(__('Incorrect Captcha code', 'wp-job-portal')), 'error',$this->getMessagekey());
            $array = wp_json_encode(array('html' => 'error'));
            return $array;
        }
        if(isset($data) && !empty($data['id']) && !wpjobportal::$_common->wpjp_isadmin()){
            if ($this->getIfResumeOwner($data['id']) == false) {
                return false;
            }
        }
        // check to make sure quick apply is not edited
        if (isset($data['quick_apply']) && $data['quick_apply'] == 1 ) {
            return false;
        }


        $resumeid = $data['id'];
        $data['sec_1']['id'] = $resumeid; // because id is not in any section to put for sections
        if(!current_user_can('manage_options')){ // if not admin then get current user is
            $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        }else{ // if admin then use the uid submitted on the form
            $uid = $data['uid'];
        }
        $data['sec_1']['uid'] = $uid;

        $resumedata = $data['sec_1'];
        $resumedata['resume_logo_deleted'] = $data['resume_logo_deleted'];

        $resume = $this->storePersonalSection($resumedata); // store persnal section
        if($resume === false) return false;
        if(isset($resume[0])) $filestatus = $resume[0];
        $resumeid = $resume[1];
        $resumealiasid = $resume[2].'-'.$resumeid;
        if (wpjobportal::$_common->wpjp_isadmin()) {
            $resumealiasid = $resumeid;
        }
        $sections =
            array(
                1 => array('name' => 'address' , 'id' => 2),
                2 => array('name' => 'institute' , 'id' => 3),
                3 => array('name' => 'employer' , 'id' => 4),
                4 => array('name' => 'skills' , 'id' => 5),
                5 => array('name' => 'editor' , 'id' => 6),
                6 => array('name' => 'reference' , 'id' => 7),
                7 => array('name' => 'language' , 'id' => 8),
            );
        $doremove = false;
        foreach ($sections as $sec) {
            $sec_id = 'sec_'.$sec['id'];
            // get sections's data object vise
            $row = array();
            $total = isset($data[$sec_id]) ? count($data[$sec_id]['id']) : 0; // only published sections will be considred
            // check if empty section submitted
            $is_filled = false;
            for ($i = 0; $i < $total; $i++) {
                $doremove = false;
                foreach ($data[$sec_id] as $key => $arr) {
                    $row[$key] = isset($arr[$i]) ? $arr[$i] : '';
                    if($key == 'deletethis' AND $arr[$i] == 1){
                        $doremove = true;
                    }
                    if( ! empty($arr[$i])){
                        $is_filled = true;
                    }
                }
                $row['resumeid'] = $resumeid;
                wpjobportal::$_data['id'] = $resumeid;
                if($doremove){
                    //var_dump('do remove sec '.$sec);
                    $result = $this->removeResumeSection( $row, $sec);
                }else{
                    if($sec['id'] == 5 || $sec['id'] == 6){
                        $is_filled = true;
                    }
                    if( $is_filled ){
                        $result = $this->storeResumeSection( $row , $sec , $i); // i is use for geting custom files
                        if($result==false) return false;
                    }
                }
            }
        }
        // visitor apply
        if (isset($_COOKIE['wpjobportal_apply_visitor'])) {
            if (!is_user_logged_in()) {
                $url = apply_filters('wpjobportal_addons_applyjob_visitor',false);
                wp_redirect($url);
                exit;
            }
        }

        // action hook for add resume
        if(empty($data['id'])){ // changed the if to handle problem case (it will handle unset and null set value case)
            $data['id'] = $row['resumeid']; // $row is not stc class object of table class
        }
        do_action('wpjobportal_after_store_resume_hook',$data);

        return WPJOBPORTAL_SAVED;
    }

    private function getSaveSearchForView($search) {
       if (!is_numeric($search))
            return false;
        $query = "SELECT * FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumesearches` WHERE id = " . esc_sql($search);
        $result = wpjobportal::$_db->get_row($query);
        $inquery = "";
        $params = array();
        if ( isset($result->searchparams) && $result->searchparams != null) {
            $params = json_decode($result->searchparams, true);
        }
        if (isset($params['application_title'])) {
            wpjobportal::$_data['filter']['application_title'] = $params['application_title'];
            $inquery .= " AND resume.application_title LIKE '%" . esc_sql($params['application_title']) . "%' ";
        }
        if (isset($params['first_name'])) {
            wpjobportal::$_data['filter']['first_name'] = $params['first_name'];
            $inquery .= " AND resume.first_name LIKE '%" . esc_sql($params['first_name']) . "%'";
        }
        if (isset($params['middle_name'])) {
            wpjobportal::$_data['filter']['middle_name'] = $params['middle_name'];
            $inquery .= " AND resume.middle_name LIKE '%" . esc_sql($params['middle_name']) . "%'";
        }
        if (isset($params['last_name'])) {
            wpjobportal::$_data['filter']['last_name'] = $params['last_name'];
            $inquery .= " AND resume.last_name LIKE '%" .esc_sql( $params['last_name']) . "%'";
        }
        if (isset($params['nationality']) && is_numeric($params['nationality'])) {
            wpjobportal::$_data['filter']['nationality'] = $params['nationality'];
            $inquery .= " AND resume.nationality = " . esc_sql($params['nationality']);
        }
        if (isset($params['gender'])) {
            wpjobportal::$_data['filter']['gender'] = $params['gender'];
            $inquery .= " AND resume.gender = '" . esc_sql($params['gender']) . "' ";
        }
        if (isset($params['category']) && is_numeric($params['category'])) {
            wpjobportal::$_data['filter']['category'] = $params['category'];
            $inquery .= " AND resume.job_category = " . esc_sql($params['category']) . " ";
        }
        if (isset($params['jobtype']) && is_numeric($params['jobtype'])) {
            wpjobportal::$_data['filter']['jobtype'] = $params['jobtype'];
            $inquery .= " AND resume.jobtype = " . esc_sql($params['jobtype']) . " ";
        }
        if (isset($params['salaryrangetype'])) {
            wpjobportal::$_data['filter']['salaryrangetype'] = $params['salaryrangetype'];
            $inquery .= " AND salaryrangetype.title LIKE '%" . esc_sql($params['salaryrangetype']) . "%' ";
        }
        if (isset($params['tags'])) {
            wpjobportal::$_data['filter']['tags'] = $params['tags'];
            $res = $this->makeQueryFromArray('tags', $params['tags']);
            if ($res)
                $inquery .= " AND ( " . $res . " )";
        }
        if (isset($params['city'])) {
            wpjobportal::$_data['filter']['city'] = $params['city'];
            $_SESSION['wpjobportal-searchresume-form']['city'] = $params['city'];
        }
        //custom field code
        $inquery2 = '';
        if (isset($result->params) && $result->params != null) {
            $data = wpjobportal::$_wpjpcustomfield->userFieldsData(3);
            $or = '';
            if (!empty($data)) {
                $inquery2 .= " AND (";
                $valarray = json_decode($result->params);

                foreach ($data as $uf) {
                    $fieldname = $uf->field;
                    if (isset($valarray->$fieldname) && $valarray->$fieldname != null) {
                        switch ($uf->userfieldtype) {
                            case 'text':
                            case 'email':
                                //$inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"%' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '%"%\' ';
                                $inquery2 .= esc_sql($or) . ' resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '.*"\' ';
                                $or = " OR ";
                                break;
                            case 'combo':
                                $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '"%\' ';
                                $or = " OR ";
                                break;
                            case 'depandant_field':
                                $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '"%\' ';
                                $or = " OR ";
                                break;
                            case 'radio':
                                $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '"%\' ';
                                $or = " OR ";
                                break;
                            case 'checkbox':
                                //$inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars(implode(", ",$valarray->$fieldname)) . '%\' ';
                                $inquery2 .= esc_sql($or) . ' resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*' . wpjobportalphplib::wpJP_htmlspecialchars(implode(", ",$valarray->$fieldname)) . '.*"\' ';
                                $or = " OR ";
                                break;
                            case 'date':
                                $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '"%\' ';
                                $or = " OR ";
                                break;
                            case 'editor':
                                $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '"%\' ';
                                $or = " OR ";
                                break;
                            case 'textarea':
                                // $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '"%\' ';
                                $inquery2 .= esc_sql($or) . ' resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*' . wpjobportalphplib::wpJP_htmlspecialchars($valarray->$fieldname) . '.*"\' ';
                                $or = " OR ";
                                break;
                            case 'multiple':
                                // $inquery2 .= esc_sql($or) . ' resume.params LIKE \'%"' . esc_sql($uf->field) . '":[';
                                // $icomma = '';
                                // for ($i = 0; $i < count($valarray->$fieldname); $i++) {
                                //     $multiplevals = $valarray->$fieldname;
                                //     $inquery2 .=$icomma . '"' . wpjobportalphplib::wpJP_htmlspecialchars($multiplevals[$i]) . '"';
                                //     $icomma = ',';
                                // }
                                // $inquery2 .=']%\' ';



                                $finalvalue = '';
                                foreach($valarray->$fieldname AS $value){
                                    if($value){
                                        $finalvalue .= $value.'.*';
                                    }
                                }
                                if($finalvalue){
                                    $inquery2 .= esc_sql($or) . ' resume.params REGEXP \'%"' . esc_sql($uf->field) . '":"[^"]*'.wpjobportalphplib::wpJP_htmlspecialchars($finalvalue).'"\' ';
                                }
                                $or = " OR ";
                                break;
                        }
                        //to convert an std class object to array
                        if (!empty($valarray)) {
                            $valarray = wp_json_encode($valarray);
                            $valarray = json_decode($valarray, true);
                        }
                        wpjobportal::$_data['filter']['params'] = $valarray;
                    }
                }
                $inquery2 .= " ) ";
            }
        }
        //patch
        if ($inquery2 == ' AND ( ) ') {
            $inquery2 = '';
        }
        //end
        $inquery .= $inquery2;
        return $inquery;
    }
    function storeResumeSection( $formdata, $section , $i) { // i is the index of A section have multi forms
        if(empty($section)) return false;
        $sectionid = $section['id'];
        $datafor = $section['name'];

        // store skills/editor sections data
        if($sectionid == 5 || $sectionid == 6){
            $result = $this->storeSkillsAndResumeSection($formdata , $section, $i);
            return $result;
        }
        if ($sectionid == 2) {
            $table_name = 'resume' . $datafor . 'es';
        } else {
            $table_name = 'resume' . $datafor . 's';
        }

       $row = WPJOBPORTALincluder::getJSTable($table_name);
        $return_cf = $this->makeResumeTableParams($formdata,$sectionid,$i);
        $params = array();
        $par = json_decode($return_cf['params'],true);
        if(is_array($par)){
            foreach($par AS $key => $value){
                $params[$key] = $value;
            }
        }
        $resumeid = $formdata['resumeid'];

        //check whether form data array is empty;
            $check_array = $formdata;
            unset($check_array['resumeid']);
            $empty_flag = (count(array_filter($check_array)) == 0) ? 1 : 0;
            if($empty_flag == 1){
                return true;
            }
        //

        // moved this code below to avoid saving empty sections because there date fields are filled.
        if($section['id']==4){
            if(!isset($formdata['employer_current_status'])){
             $formdata['employer_current_status']=0;
            }
            if(isset($formdata['employer_from_date']) && $formdata['employer_from_date'] != ''){
              $formdata['employer_from_date']= gmdate('Y-m-d',strtotime($formdata['employer_from_date']));
            }else{
              $formdata['employer_from_date'] = '1970-01-01';
            }
            if(isset($formdata['employer_to_date']) && $formdata['employer_to_date'] !='' ){
              $formdata['employer_to_date'] = gmdate('Y-m-d',strtotime($formdata['employer_to_date']));
            }else{
              $formdata['employer_to_date'] = '1970-01-01';
            }
        }
        // to handle the case of education section

        if($datafor == 'institute'){
            if(isset($formdata['todate']) && $formdata['todate'] != ''){
              $formdata['todate']= gmdate('Y-m-d',strtotime($formdata['todate']));
            }else{
              $formdata['todate'] = '1970-01-01';
            }
            if(isset($formdata['fromdate']) && $formdata['fromdate'] !='' ){
              $formdata['fromdate'] = gmdate('Y-m-d',strtotime($formdata['fromdate']));
            }else{
              $formdata['fromdate'] = '1970-01-01';
            }
        }

        // set created date
        if( ! is_numeric($formdata['id'])){
            $formdata['created'] = gmdate('Y-m-d H:i:s');
        }

        if(WPJOBPORTALincluder::getJSModel('common')->checkLanguageSpecialCase()){
            $formdata = wpjobportal::$_common->stripslashesFull($formdata);// remove slashes with quotes.
        }

        if($params){
            $formdata['params'] = wp_json_encode($params);
        }else{
            $formdata['params'] = '';
        }
        // custom field code end
        $formdata = wpjobportal::wpjobportal_sanitizeData($formdata);

        if (!$row->bind($formdata)) {
            $this->setError($this->_db->getErrorMsg());
            return false;
        }


        if (!$row->check()) {
            $this->setError($this->_db->getErrorMsg());
            return false;
        }

        if (!$row->store()) {
            $this->setError($this->_db->getErrorMsg());
            return false;
        }

        return true;
    }
    function storeSkillsAndResumeSection($formdata , $section, $i){
        if(empty($section)) return '';
        $sectionid = $section['id'];
        $datafor = $section['name'];

        $row = WPJOBPORTALincluder::getJSTable('resume');

        $formdata['id'] = $formdata['resumeid'];
        $resumeid = $formdata['resumeid'];
        if(!is_numeric($resumeid)){
            return '';
        }
        unset($formdata['resumeid']);
        if ($sectionid == 6) { // editor
            //$formdata['resume'] = JRequest::getVar('resumeeditor', '', 'post', 'string', JREQUEST_ALLOWHTML );
            // RESUME Resume CUSTOM FIELD
            //$params = $this->getDataForParams(6, $data);
            $return_cf = $this->makeResumeTableParams($formdata, $sectionid, $i);
            $params = $return_cf['params'];

            $pquery = "SELECT params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($resumeid);
            $parmsvar = wpjobportal::$_db->get_var($pquery);
            $parray = array();
            if (isset($parmsvar) && $parmsvar != '') {
                $parray = json_decode($parmsvar);
            }
            if (isset($params) && $params != '') {
                $params = json_decode($params);
            }
            if(!empty($parray)){
                $params = (object) array_merge((array) $params, (array) $parray);
            }
            if(is_object($params) && !empty($params)){
                $params = wp_json_encode($params);
                $queryparams = " , params='" . $params . "' ";
            }else{
                $queryparams = "";
            }
            //END
            $resume = WPJOBPORTALrequest::getVar('resume_edit_val');
            if($resume == ''){
                $resume = WPJOBPORTALrequest::getVar('resume');
            }
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_resume` SET resume='" . esc_sql($resume) . "' " .$queryparams." WHERE id = ".esc_sql($resumeid);
            wpjobportal::$_db->query($query);

        }elseif($sectionid==5){
            $skills = WPJOBPORTALrequest::getVar('skills');
            $skills = sanitize_text_field( $skills );
            // RESUME SKILL CUSTOM FIELD
            //$params = $this->getDataForParams(5, $data);
            $return_cf = $this->makeResumeTableParams($formdata, $sectionid, $i);
            $params = $return_cf['params'];
            $pquery = "SELECT params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($resumeid);
            $parmsvar = wpjobportal::$_db->get_var($pquery);

            $parray = array();
            if (isset($parmsvar) && $parmsvar !='' ) {
                $parray = json_decode($parmsvar);
            }
            if (isset($params) && $params != '') {
                $params = json_decode($params);
            }
            if(!empty($parray)){
                $params = (object) array_merge((array) $parray, (array) $params); // in case of edit/update of field old values were presistent
            }
            if(is_object($params) && !empty($params)){
                $params = wp_json_encode($params);
                $queryparams = " , params='" . $params . "' ";
            }else{
                $queryparams = "";
            }
            //END
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_resume` SET skills='" . esc_sql($skills) . "' " . $queryparams . " WHERE id = ".esc_sql($resumeid);
            wpjobportal::$_db->query($query);

        }
        return true;
        $return_cf = $this->makeResumeTableParams($formdata, $sectionid, $i);
        $formdata['params'] = $return_cf['params'];
        if (!$row->bind($formdata)) {
            $this->setError($this->_db->getErrorMsg());
            return false;
        }

        //retain last state of below vars in edit
        if (is_numeric($formdata['id']) ){
            unset($row->isfeaturedresume);
        }

        if (!$row->store()) {
            $this->setError($this->_db->getErrorMsg());
            return false;
        }
        return true;
    }

    function removeResumeSection( $formdata, $section ){
        if($formdata['deletethis'] != 1){
            return;
        }
        if($formdata['id'] == '' || !isset($formdata['id'])){
            return;
        }
        //exit;
        if(empty($section)) return false;
        $sec_id = $section['id'];
        $datafor = $section['name'];

        $resumeid = $formdata['resumeid'];
        $sectionid = $formdata['id'];

        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        if(!is_numeric($resumeid)) return false;
        if(!is_numeric($sectionid)) return false;

        if ( ! current_user_can( 'manage_options' ) ) { // user is not admin check perform
            if( ! WPJOBPORTALincluder::getObjectClass('user')->isguest()){
                $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = ".esc_sql($resumeid)." AND uid =". esc_sql($uid);
                $result = wpjobportal::$_db->get_var($query);
                if($result == 0){
                    return false; // not your resume
                }
            }
        }

        if ($sec_id == 2) {
            $table_name = 'resume' . $datafor . 'es';
        } else {
            $table_name = 'resume' . $datafor . 's';
        }

        if($sec_id == 5 || $sec_id == 6){ //skill,editor
            return true;
        }else{
            $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_".esc_sql($table_name)."` WHERE id = ".esc_sql($sectionid);
            if (wpjobportaldb::query($query)) {
                return true;
            }else{
                return false;
            }
        }
    }

    function storePersonalSection($data){
       if(empty($data)) return false;
        if(isset($data['id']) && $data['id'] == 0 ) $data['id'] = '';
        $id = (int) $data['id'];
        $isnew = !$id;
        $row = WPJOBPORTALincluder::getJSTable('resume');
        $submission_type = wpjobportal::$_config->getConfigValue('submission_type') ;
        $user = WPJOBPORTALincluder::getObjectClass('user');
        if (empty($data['id'])) {
            if(isset($data['application_title'])){
                $data['alias'] = wpjobportalphplib::wpJP_str_replace(' ', '-', $data['application_title']);
            }else{
                $alias_string = $data['first_name'];;
                if(isset($data['middle_name'])){// min field issue
                    $alias_string .= ' '.$data['middle_name'];
                }
                $alias_string .= ' '.$data['last_name'];
                $data['alias'] = wpjobportalphplib::wpJP_str_replace(' ', '-', $alias_string);
            }
            $data['alias'] = wpjobportalphplib::wpJP_str_replace('_', '-', $data['alias']);
            $data['created'] = gmdate('Y-m-d H:i:s');
            $visitorcanapply = wpjobportal::$_config->getConfigurationByConfigName('visitor_can_apply_to_job');
            $isguest = WPJOBPORTALincluder::getObjectClass('user')->isguest();
            if((in_array('credits', wpjobportal::$_active_addons) && $isguest && $visitorcanapply != 1) || (in_array('credits', wpjobportal::$_active_addons) && !$isguest)){
                if($submission_type == 1){
                    $data['status'] = wpjobportal::$_config->getConfigurationByConfigName('empautoapprove');
                }elseif ($submission_type == 2) {
                    // in case of per listing submission mode
                    $price_check = WPJOBPORTALincluder::getJSModel('credits')->checkIfPriceDefinedForAction('add_resume');
                    if($price_check == 1){ // if price is defined then status 3
                        $data['status'] = 3;
                    }else{ // if price not defined then status set to auto approve configuration
                        $data['status'] = wpjobportal::$_config->getConfigValue('empautoapprove');
                    }
                }elseif ($submission_type == 3) {
                        $upakid = WPJOBPORTALrequest::getVar('upakid',null,0);
                        $package = apply_filters('wpjobportal_addons_userpackages_permodule',false,$upakid,$user->uid(),'remresume');
                        if( !$package ){
                            return WPJOBPORTAL_SAVE_ERROR;
                        }
                        if( $package->expired ){
                            return WPJOBPORTAL_SAVE_ERROR;
                        }
                        //if Department are not unlimited & there is no remaining left
                        if( $package->resume!=-1 && !$package->remresume ){ //-1 = unlimited
                            return WPJOBPORTAL_SAVE_ERROR;
                        }
                        #user packae id--
                        $data['status'] = wpjobportal::$_config->getConfigValue('empautoapprove');
                        $data['userpackageid'] = $upakid;
                }
            }else{
                $data['status'] = wpjobportal::$_config->getConfigValue('empautoapprove');
            }
        } else {
            if(current_user_can('manage_options')){
                $data['status'] = $data['status'];
            }else{
                $row->load($data['id']);
                $data['status'] = $row->status;
            }
        }
        /*$query = "SELECT * FROM " . wpjobportal::$_db->prefix . "wj_portal_fieldsordering WHERE field =  'searchable' AND fieldfor =3";
        $record = wpjobportal::$_db->get_row($query);
        if($record->published == 0 AND is_user_logged_in()){
            $data['searchable'] = 1;
        }elseif($record->isvisitorpublished == 0){
            $data['searchable'] = 1;
        }*/

        $data['last_modified'] = gmdate('Y-m-d H:i:s');
        $section = 1;

        $data = wpjobportal::wpjobportal_sanitizeData($data);

        $data = wpjobportal::$_common->stripslashesFull($data);// remove slashes with quotes.
        $return_cf = $this->makeResumeTableParams($data,$section);
        $data['params'] = $return_cf['params'];

        // storing  custom section values
        $resume_custom_sections = WPJOBPORTALincluder::getJSModel('fieldordering')->getResumeCustomSections();

        if(!empty($resume_custom_sections)){
            $main_params = json_decode($data['params'],true); // decoding main paras
            $sec_data = WPJOBPORTALrequest::get('post'); // fetching POST to extract custom section field values
            $section_parms_array = array();
            foreach ($resume_custom_sections as $resume_section) {
                //$resume_section_data = $this->makeResumeTableParams($sec_data,$resume_section->section); // create and fetch parms for custom section fields using $_POST data and fielf ordering section value
                $resume_section_data = $this->getDataForParamsResume($resume_section->section , $sec_data);

                $resume_section_data_params = json_decode($resume_section_data['params'],true);// convert custom section json to php array
                //$main_params = array_merge($main_params,$resume_section_data_params); // merge php arrays main(personal section params) and custom section filds params
                $section_parms_array = array_merge($section_parms_array,$resume_section_data_params); // merge php arrays main(personal section params) and custom section filds params
            }
            if(!is_array($main_params)){// to handle empty params case
                $main_params = array();
            }
            $main_params = array_merge($main_params,$section_parms_array);
            $data['params'] = wp_json_encode($main_params);// inset new updated params php array as json to data object to stored as params
        }

        if (!$row->bind($data)) {
            return WPJOBPORTAL_SAVE_ERROR;
        }
        if (!$row->store()) {
            return WPJOBPORTAL_SAVE_ERROR;
        }
        $objectid = $row->id;
        $resumeid = $row->id;
        // to handle log error of resume_logo_deleted not set in array
        if(isset($data['resume_logo_deleted']) && $data['resume_logo_deleted'] == 1){
            $this->deleteResumeLogoModel($resumeid);
        }
        if (isset($_FILES['photo']['size']) && $_FILES['photo']['size'] > 0) {
            if(isset($data['resume_logo_deleted']) && $data['resume_logo_deleted'] != 1){
                $this->deleteResumeLogoModel($resumeid);
            }
            $this->uploadPhoto($objectid);
        }

        if (isset($_FILES['resumefiles'])) {
            $filereturnvalue = $this->uploadResume($objectid);
        }
        // upload custom files

        /*
        $return_cf['customflagforadd'] = $customflagforadd;
        $return_cf['customflagfordelete'] = $customflagfordelete;
        $return_cf['custom_field_namesforadd'] = $custom_field_namesforadd;
        $return_cf['custom_field_namesfordelete'] = $custom_field_namesfordelete;
        */
        if(is_array($return_cf) && !empty($return_cf)){
            $this->storeCustomUploadFile($resumeid,$return_cf);
        }

        // Save resumeid in session in case of visitor add resume is allowed
        if (WPJOBPORTALincluder::getObjectClass('user')->isguest()) {
            $visitor_can_add_resume = wpjobportal::$_config->getConfigurationByConfigName('visitor_can_add_resume');
            if ($visitor_can_add_resume == 1) {
                $_SESSION['wp-wpjobportal']['resumeid'] = $resumeid;
            }
        }
        //Update credits log in case of new resume
        if ($data['id'] == '') {
            if(empty($data['id'])){
                WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3,1,$resumeid); // 3 for resume,1 for add new resume
            }
        }

        if(in_array('credits', wpjobportal::$_active_addons)){
            if(!WPJOBPORTALincluder::getObjectClass('user')->isguest() && !wpjobportal::$_common->wpjp_isadmin() && empty($data['id']) && $submission_type == 3){
                do_action('wpjobportal_addons_user_transactionlog',$row,'resume',$upakid,$user->uid(),$isnew);
            }
        }

        $return = array();
        if(isset($filereturnvalue)) $return[0] = $filereturnvalue;
        $return[1] = $row->id;
        $return[2] = $row->alias;
        return $return;
    }

/*

        $return['customflagforadd'] = $customflagforadd;
        $return['customflagfordelete'] = $customflagfordelete;
        $return['custom_field_namesforadd'] = $custom_field_namesforadd;
        $return['custom_field_namesfordelete'] = $custom_field_namesfordelete;

*/
    function storeCustomUploadFile($resumeid,$data_array){
        if(!is_numeric($resumeid)){
            return;
        }

        $entity_for = 'resume';

        //removing custom field attachments
        if(isset($data_array['customflagfordelete']) && $data_array['customflagfordelete'] == true){
            foreach ($data_array['custom_field_namesfordelete'] as $key) {
               $res = wpjobportal::$_wpjpcustomfield->removeFileCustom($resumeid,$key,$entity_for);
            }
        }

        //storing custom field attachments
        if(isset($data_array['customflagforadd']) && $data_array['customflagforadd'] == true){
            foreach ($data_array['custom_field_namesforadd'] as $key) {
                if (isset($_FILES[$key])) {
                    if ($_FILES[$key]['size'] > 0) { // logo
                       $res = wpjobportal::$_wpjpcustomfield->uploadFileCustom($resumeid,$key,$entity_for);
                    }
                }
            }
        }
    }


    function makeResumeTableParams($formdata,$sectionid,$i=0){

        $return_cf = $this->getDataForParamsResume($sectionid , $formdata, $i);

        $params_new = $return_cf['params'];

        if(is_numeric($formdata['id'])){
            $params_new = json_decode($params_new, true);
            $query = "SELECT params FROM `". wpjobportal::$_db->prefix ."wj_portal_resume` WHERE id = ".esc_sql($formdata['id']);
            $oParams = wpjobportaldb::get_var($query);
            if(!empty($oParams)){
                $oParams = json_decode($oParams,true);
                $unpublihsedFields =/*apply_filters('wpjobportal_addons_customFields_unpublish',false,3,1);*/ WPJOBPORTALincluder::getJSModel('customfield')->getUnpublishedFieldsFor(3,1);
                foreach($unpublihsedFields AS $field){
                    if(isset($oParams[$field->field]) && !empty($oParams[$field->field])){
                        $params_new[$field->field] = $oParams[$field->field];
                    }
                }
                $sectionfields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3,$sectionid);
                foreach($sectionfields AS $cfield){
                    if(isset($oParams[$cfield->field]))
                        unset($oParams[$cfield->field]);
                }

                foreach($oParams AS $key => $value){
                    $params_new[$key] = $value;
                }
            }
            if($params_new){
                $params_new = wp_json_encode($params_new);
            }
        }
        $return_cf['params'] = $params_new;
        //fix for resume only
        if($return_cf['params'] == null || $return_cf['params'] == 'null'){
            $return_cf['params'] = '';
        }
        return $return_cf;
    }

    // custom field code start
    function getDataForParamsResume($sectionid, $data , $i = 0) {
        $userfieldforresume = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3, $sectionid);
        $customflagforadd = false;
        $customflagfordelete = false;
        $custom_field_namesforadd = array();
        $custom_field_namesfordelete = array();
        $params = array();
        foreach ($userfieldforresume AS $ufobj) {
            $vardata = '';
            if ($ufobj->userfieldtype == 'date') {
                $vardata = (isset($data[$ufobj->field]) && $data[$ufobj->field] !='')  ? gmdate('Y-m-d H:i:s',strtotime($data[$ufobj->field])) : '';
            } elseif($ufobj->userfieldtype == 'file'){
                // if(isset($_POST[$ufobj->field.'_1']) && $_POST[$ufobj->field.'_1'] == 0 && isset($_POST[$ufobj->field.'_2'])){
                //     $vardata = $data[$ufobj->field.'_2'];
                $ufield_1 = WPJOBPORTALrequest::getVar($ufobj->field.'_1','post','');
                $ufield_2 = WPJOBPORTALrequest::getVar($ufobj->field.'_2','post','');
                if($ufield_1 == 0 && $ufield_2 != ''){
                    $vardata = sanitize_file_name($ufield_2);
                }else{
                    // if($sectionid == 1){
                    //     $section_id = 'sec_'.$sectionid;
                    //     $vardata = isset($_FILES[$section_id]['name'][$ufobj->field]) ? sanitize_file_name($_FILES[$section_id]['name'][$ufobj->field]) : '';
                    // }else{
                        //$section_id = 'sec_'.$sectionid;
                        if(isset($_FILES[$ufobj->field])){
                            $vardata = isset($_FILES[$ufobj->field]['name']) ? sanitize_file_name($_FILES[$ufobj->field]['name']) : '';
                        }
                    //}
                }
                $customflagforadd = true;
                $custom_field_namesforadd[] = $ufobj->field;
            }else{
                $vardata = isset($data[$ufobj->field]) ? $data[$ufobj->field] : '';
            }
            if(isset($data[$ufobj->field.'_1']) && $data[$ufobj->field.'_1'] == 1){
                $customflagfordelete = true;
                $custom_field_namesfordelete[]= $data[$ufobj->field.'_2'];
            }
            if($vardata != ''){
                if(is_array($vardata)){
                    $vardata = implode(', ', $vardata);
                }
                $params[$ufobj->field] = wpjobportalphplib::wpJP_htmlspecialchars($vardata);
            }else{ // to handle edit case filled issue
                $params[$ufobj->field] = '';
            }
        }
        $params = wp_json_encode($params);

        $return = array();
        $return['params'] = $params;
        $return['customflagforadd'] = $customflagforadd;
        $return['customflagfordelete'] = $customflagfordelete;
        $return['custom_field_namesforadd'] = $custom_field_namesforadd;
        $return['custom_field_namesfordelete'] = $custom_field_namesfordelete;

        return $return;
    }
    // custom field code End

    function getResumeDataBySection($resumeid, $sectionName){
        if(!is_numeric($resumeid)) return false;

        switch ($sectionName) {
            case 'personal': $section = 1; break;
            case 'address': $section = 2; break;
            case 'institute': $section = 3; break;
            case 'employer': $section = 4; break;
            case 'skills': $section = 5; break;
            case 'editor': $section = 6; break;
            case 'reference': $section = 7; break;
            case 'language': $section = 8; break;
            case 'default':
                return false;
        }
        $data = array();
        if ($sectionName == 'personal') {
            $results = $this->getResumeBySection($resumeid, $sectionName);
            //$resumelists = $this->getResumeListsForForm($results);
            //wpjobportal::$_data[2]=$resumelists;
        } else {
            $sectionData = array();
            if ($sectionName == "skills" OR $sectionName == "editor") {
                $results = $this->getResumeBySection($resumeid, $sectionName);
            } else {
                $results = $this->getResumeBySection($resumeid, $sectionName);
            }
        }
        $custom_fields =WPJOBPORTALincluder::getObjectClass('customfields')->formCustomFields($field, 1, 1);
        $resume_section_fields = WPJOBPORTALincluder::getJSModel('customfield')->getResumeFieldsOrderingBySection($section);
        wpjobportal::$_data[0] = $results;
        return;
    }

    function getResumeBySection($resumeid, $sectionName ) {
        if (!is_numeric($resumeid)) {
            return false;
        }
        if (empty($sectionName)) {
            return false;
        }
        $resume = '';
        if ($sectionName == 'personal') {
            $query = "SELECT resume.id,resume.driving_license,resume.tags AS viewtags , resume.tags AS resumetags,resume.uid,resume.application_title, resume.first_name, resume.last_name, resume.cell, resume.email_address, resume.nationality AS nationalityid, resume.photo, resume.gender, resume.job_category, resume.experienceid, resume.home_phone, resume.work_phone, resume.date_of_birth,
                , resume.jobsalaryrangetype, resume.skills, resume.keywords, resume.searchable, resume.iamavailable, cat.cat_title AS categorytitle, jobtype.title AS jobtypetitle, resume.date_start,resume.jobtype
                , resume.resume, saltype.title AS rangetype,nationality.name AS nationality
                ,resume.params,resume.status
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON cat.id = resume.job_category
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_salaryrangetypes` AS saltype ON saltype.id = resume.jobsalaryrangetype
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS nationality ON nationality.id = resume.nationality
                        WHERE resume.id = " . esc_sql($resumeid);

            $isguest = WPJOBPORTALincluder::getObjectClass('user')->isguest();
            $iswpjobportaluser = WPJOBPORTALincluder::getObjectClass('user')->isWPJOBPORTALUser();
            // uid was undefined
            // if(! $isguest && $iswpjobportaluser){
            //     if (!current_user_can( 'manage_options' ) && $uid) {
            //         //$query .= " AND resume.uid  = " . esc_sql($uid);
            //     }
            // }
            $resume = wpjobportaldb::get_row($query);
        } elseif ($sectionName == 'skills') {
            $query = "SELECT id,uid,skills,params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($resumeid);
            $resume = wpjobportaldb::get_row($query);
        } elseif ($sectionName == 'editor') {
            $query = "SELECT id,uid,resume,params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($resumeid);
            $resume = wpjobportaldb::get_row($query);
        } elseif ($sectionName == 'language') {
            $query = "SELECT * FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumelanguages` WHERE resumeid = " . esc_sql($resumeid);
            $resume = wpjobportaldb::get_results($query);
        } elseif ($sectionName == 'address') {
            $query = "SELECT address.*,
                        cities.id AS cityid,
                        cities.name AS city,
                        states.name AS state,
                        countries.name AS country
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS cities ON address.address_city = cities.id
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS states ON cities.stateid = states.id
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS countries ON cities.countryid = countries.id
                        WHERE address.resumeid = " . esc_sql($resumeid);
            $resume = wpjobportaldb::get_results($query);
        } else {
            $query = "SELECT " . esc_sql($sectionName) . ".*,
                        cities.id AS cityid,
                        cities.name AS city,
                        states.name AS state,
                        countries.name AS country
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume" . esc_sql($sectionName) . "s` AS " . esc_sql($sectionName) . "
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS cities ON " . esc_sql($sectionName) . "." . esc_sql($sectionName) . "_city = cities.id
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS states ON cities.stateid = states.id
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS countries ON cities.countryid = countries.id
                        WHERE " . esc_sql($sectionName) . ".resumeid = " . esc_sql($resumeid);
            $resume = wpjobportaldb::get_results($query);
        }
        return $resume;
    }
    // joomla code in this function
    // function getResumeListsForForm($application) {
    //     $resumelists = array();
    //     $nationality_required = '';
    //     $license_country_required = '';
    //     $gender_required = '';
    //     $driving_license_required = '';
    //     $category_required = '';
    //     $subcategory_required = '';
    //     $salary_required = '';
    //     $workpreference_required = '';
    //     $education_required = '';
    //     $expsalary_required = '';

    //     // explicit use of site model in case form admin resume
    //     //$fieldsordering = $this->getJSSiteModel('customfields')->getResumeFieldsOrderingBySection(1);
    //     $fieldsordering = wpjobportal::$_wpjpcustomfield->getResumeFieldsOrderingBySection(1);
    //     foreach ($fieldsordering AS $fo) {
    //         switch ($fo->field) {
    //             case "nationality":
    //                 $nationality_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "license_country":
    //                 $license_country_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "gender":
    //                 $gender_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "driving_license":
    //                 $driving_license_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "job_category":
    //                 $category_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "job_subcategory":
    //                 $subcategory_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "salary":
    //                 $salary_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "jobtype":
    //                 $workpreference_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "heighestfinisheducation":
    //                 $education_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "desired_salary":
    //                 $expsalary_required = ($fo->required ? 'required' : '');
    //                 break;
    //             case "total_experience":
    //                 $experienceid_required = ($fo->required ? 'required' : '');
    //                 break;
    //         }
    //     }
    //     // since common is already executed form admin


    //     $gender = WPJOBPORTALincluder::getJSModel('common')->getGender();

    //     $defaultCategory = WPJOBPORTALincluder::getJSModel('category')->getDefaultCategoryId();
    //     $defaultJobtype = WPJOBPORTALincluder::getJSModel('jobtype')->getDefaultJobTypeId();
    //     $yesno=WPJOBPORTALincluder::getJSModel('common')->getYesNo();
    //     $job_type = WPJOBPORTALincluder::getJSModel('jobtype')->getJobTypeForCombo();
    //     $job_categories = WPJOBPORTALincluder::getJSModel('category')->getCategoryForCombobox('');
    //     $countries = WPJOBPORTALincluder::getJSModel('country')->getCountriesForCombo();
    //     if (isset($application)) {
    //         $resumelists['nationality'] = JHTML::_('select.genericList', $countries, 'sec_1[nationality]', 'class="inputbox ' . $nationality_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->nationality);
    //         $resumelists['license_country'] = JHTML::_('select.genericList', $countries, 'sec_1[license_country]', 'class="inputbox ' . $license_country_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->license_country);

    //         $resumelists['gender'] = JHTML::_('select.genericList', $gender, 'sec_1[gender]', 'class="inputbox ' . $gender_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->gender);
    //         $resumelists['driving_license'] = JHTML::_('select.genericList', $driving_license, 'sec_1[driving_license]', 'class="inputbox ' . $driving_license_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->driving_license);

    //         $resumelists['job_category'] = JHTML::_('select.genericList', $job_categories, 'sec_1[job_category]', 'class="inputbox ' . $category_required . ' wpjobportal-cbo" ' . 'onChange="return fj_getsubcategories(\'job_subcategory\', this.value)"', 'value', 'text', $application->job_category);
    //         if(!empty($job_subcategories))
    //             $resumelists['job_subcategory'] = JHTML::_('select.genericList', $job_subcategories, 'sec_1[job_subcategory]', 'class="inputbox ' . $subcategory_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->job_subcategory);
    //         else
    //             $resumelists['job_subcategory'] = JHTML::_('select.genericList', array(), 'sec_1[job_subcategory]', 'class="inputbox ' . $subcategory_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->job_subcategory);

    //         $resumelists['jobtype'] = JHTML::_('select.genericList', $job_type, 'sec_1[jobtype]', 'class="inputbox ' . $workpreference_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->jobtype);
    //         $resumelists['jobsalaryrange'] = JHTML::_('select.genericList', $job_salaryrange, 'sec_1[jobsalaryrange]', 'class="inputbox ' . $salary_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->jobsalaryrange);
    //         $resumelists['desired_salary'] = JHTML::_('select.genericList', $job_salaryrange, 'sec_1[desired_salary]', 'class="inputbox ' . $expsalary_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $application->desired_salary);
    //         $resumelists['jobsalaryrangetypes'] = JHTML::_('select.genericList', $job_salaryrangetype, 'sec_1[jobsalaryrangetype]', 'class="inputbox wpjobportal-cbo" ' . '', 'value', 'text', $application->jobsalaryrangetype);
    //         $resumelists['djobsalaryrangetypes'] = JHTML::_('select.genericList', $job_salaryrangetype, 'sec_1[djobsalaryrangetype]', 'class="inputbox wpjobportal-cbo" ' . '', 'value', 'text', $application->djobsalaryrangetype);
    //         $resumelists['currencyid'] = JHTML::_('select.genericList', $this->getJSModel('currency')->getCurrency(), 'sec_1[currencyid]', 'class="inputbox wpjobportal-cbo" ' . '', 'value', 'text', $application->currencyid);
    //         $resumelists['dcurrencyid'] = JHTML::_('select.genericList', $this->getJSModel('currency')->getCurrency(), 'sec_1[dcurrencyid]', 'class="inputbox wpjobportal-cbo" ' . '', 'value', 'text', $application->dcurrencyid);
    //         $resumelists['experienceid'] = JHTML::_('select.genericList', $experiences, 'sec_1[experienceid]', 'class="inputbox wpjobportal-cbo" ' . '', 'value', 'text', $application->experienceid);
    //     } else {
    //         $resumelists['license_country'] = JHTML::_('select.genericList', $countries, 'sec_1[license_country]', 'class="inputbox ' . $license_country_required . ' wpjobportal-cbo" ' . '', 'value', 'text', '');
    //         $resumelists['nationality'] = JHTML::_('select.genericList', $countries, 'sec_1[nationality]', 'class="inputbox ' . $nationality_required . ' wpjobportal-cbo" ' . '', 'value', 'text', '');
    //         $resumelists['gender'] = JHTML::_('select.genericList', $gender, 'sec_1[gender]', 'class="inputbox ' . $gender_required . ' wpjobportal-cbo" ' . '', 'value', 'text', '');
    //         $resumelists['driving_license'] = JHTML::_('select.genericList', $driving_license, 'sec_1[driving_license]', 'class="inputbox ' . $driving_license_required . ' wpjobportal-cbo" ' . '', 'value', 'text', '');

    //         $resumelists['job_category'] = JHTML::_('select.genericList', $job_categories, 'sec_1[job_category]', 'class="inputbox ' . $category_required . ' wpjobportal-cbo" ' . 'onChange="fj_getsubcategories(\'job_subcategory\', this.value)"', 'value', 'text', $defaultCategory);
    //         $resumelists['job_subcategory'] = JHTML::_('select.genericList', $job_subcategories, 'sec_1[job_subcategory]', 'class="inputbox ' . $subcategory_required . ' wpjobportal-cbo" ' . '', 'value', 'text', '');

    //         $resumelists['jobtype'] = JHTML::_('select.genericList', $job_type, 'sec_1[jobtype]', 'class="inputbox ' . $workpreference_required . ' wpjobportal-cbo" ' . '', 'value', 'text', $defaultJobtype);

    //     }
    //     return $resumelists;
    // }
/* new code for resume start */

 function getAllEmpApps() {

        $this->sorting();
        //Filter
        $searchtitle = wpjobportal::$_search['resumes']['searchtitle'];
        $searchname = wpjobportal::$_search['resumes']['searchname'];
        $searchjobcategory = wpjobportal::$_search['resumes']['searchjobcategory'];
        $searchjobtype = wpjobportal::$_search['resumes']['searchjobtype'];
        $searchjobsalaryrange = wpjobportal::$_search['resumes']['searchjobsalaryrange'];
        $status = wpjobportal::$_search['resumes']['status'];
        $datestart = wpjobportal::$_search['resumes']['datestart'];
        $dateend = wpjobportal::$_search['resumes']['dateend'];
        $featured = wpjobportal::$_search['resumes']['featured'];

        wpjobportal::$_data['filter']['searchtitle'] = $searchtitle;
        wpjobportal::$_data['filter']['searchname'] = $searchname;
        wpjobportal::$_data['filter']['searchjobcategory'] = $searchjobcategory;
        wpjobportal::$_data['filter']['searchjobtype'] = $searchjobtype;
        wpjobportal::$_data['filter']['searchjobsalaryrange'] = $searchjobsalaryrange;
        wpjobportal::$_data['filter']['status'] = $status;
        wpjobportal::$_data['filter']['datestart'] = $datestart;
        wpjobportal::$_data['filter']['dateend'] = $dateend;
        wpjobportal::$_data['filter']['featured'] = $featured;

        if ($searchjobcategory)
            if (is_numeric($searchjobcategory) == false)
                return false;
        if ($searchjobtype)
            if (is_numeric($searchjobtype) == false)
                return false;
        if ($searchjobsalaryrange)
            if (is_numeric($searchjobsalaryrange) == false)
                return false;

        $inquery = "";
        if ($searchtitle)
            $inquery .= " AND LOWER(app.application_title) LIKE '%" . esc_sql($searchtitle) . "%'";
        if ($searchname) {
            $inquery .= " AND (";
            $inquery .= " LOWER(app.first_name) LIKE '%" . esc_sql($searchname) . "%'";
            $inquery .= " OR LOWER(app.last_name) LIKE '%" . esc_sql($searchname) . "%'";
            // $inquery .= " OR LOWER(app.middle_name) LIKE '%" . esc_sql($searchname) . "%'";
            $inquery .= " )";
        }
        if (is_numeric($searchjobcategory))
            $inquery .= " AND app.job_category = " . esc_sql($searchjobcategory);
        if (is_numeric($searchjobtype))
            $inquery .= " AND app.jobtype = " . esc_sql($searchjobtype);
        if (is_numeric($searchjobsalaryrange)){
            $inquery .= " AND (SELECT rangestart FROM `".wpjobportal::$_db->prefix."wj_portal_salaryrange` WHERE id = ".esc_sql($searchjobsalaryrange).") >= salarystart.rangestart AND (SELECT rangestart FROM `".wpjobportal::$_db->prefix."wj_portal_salaryrange` WHERE id = ".esc_sql($searchjobsalaryrange).") <= salarystart.rangeend";
        }
        if ($status != null) {
            if (is_numeric($status)) {
                $inquery .= " AND app.status = " . esc_sql($status);
            }
        }
        if ($datestart != null) {
            $datestart = gmdate('Y-m-d',strtotime($datestart));
            $inquery .= " AND DATE(app.created) >=  '" . esc_sql($datestart) . "' ";
        }

        if ($dateend != null) {
            $dateend = gmdate('Y-m-d',strtotime($dateend));
            $inquery .= " AND DATE(app.created) <=  '" . esc_sql($dateend) . "'";
        }
        $curdate = gmdate('Y-m-d');
        if ($featured != null) {
            $inquery .= " AND app.isfeaturedresume = 1 AND DATE(app.startfeatureddate) <= '".esc_sql($curdate)."' AND DATE(app.endfeatureddate) >= '".esc_sql($curdate)."'";
        }
        //Pagination
        $query = "SELECT COUNT(app.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS app
                WHERE app.status <> 0 AND app.quick_apply <> 1 ";
        $query.=$inquery;

        $total = wpjobportaldb::get_var($query);
        wpjobportal::$_data['total'] = $total;
        wpjobportal::$_data[1] = WPJOBPORTALpagination::getPagination($total);

        //Data
        $query = "SELECT app.uid,app.id,app.endfeatureddate, app.application_title,app.first_name, app.last_name,app.jobtype,app.photo,app.salaryfixed,app.created, app.status, cat.cat_title,app.id AS resumeid
                , jobtype.title AS jobtypetitle,app.isfeaturedresume,city.id as city,jobtype.color
            FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS app
            LEFT JOIN " . wpjobportal::$_db->prefix . "wj_portal_categories AS cat ON app.job_category = cat.id
            LEFT JOIN " . wpjobportal::$_db->prefix . "wj_portal_jobtypes AS jobtype    ON app.jobtype = jobtype.id
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = (SELECT address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = app.id ORDER BY id DESC LIMIT 1)
            WHERE app.status <> 0  AND app.quick_apply <> 1 ";
        $query.=$inquery;
        $query.=" ORDER BY " . wpjobportal::$_data['sorting'];
        $query.=" LIMIT " . WPJOBPORTALpagination::$_offset . "," . WPJOBPORTALpagination::$_limit;
        wpjobportal::$_data[0] = wpjobportaldb::get_results($query);
        wpjobportal::$_data['fields'] = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforView(3);
        wpjobportal::$_data['config'] = wpjobportal::$_config->getConfigByFor('resume');
        return;
    }


    function sortingrescat() {
        // $pagenum = WPJOBPORTALrequest::getVar('pagenum');
        // wpjobportal::$_data['sorton'] = isset(wpjobportal::$_search['myresume']['sorton']) ? wpjobportal::$_search['myresume']['sorton'] : 6;
        // wpjobportal::$_data['sortby'] = isset(wpjobportal::$_search['myresume']['sortby']) ? wpjobportal::$_search['myresume']['sortby'] : 2;
        wpjobportal::$_data['sorton'] = WPJOBPORTALrequest::getVar('sorton', 'post', 6);
        wpjobportal::$_data['sortby'] = WPJOBPORTALrequest::getVar('sortby', 'post', 2);

        switch (wpjobportal::$_data['sorton']) {
            case 1: // appilcation title
                wpjobportal::$_data['sorting'] = ' resume.application_title ';
                break;
            case 2: // first name
                wpjobportal::$_data['sorting'] = ' resume.first_name ';
                break;
            case 3: // category
                wpjobportal::$_data['sorting'] = ' category.cat_title ';
                break;
            case 4: // job type
                wpjobportal::$_data['sorting'] = ' resume.jobtype ';
                break;
            case 5: // location
                wpjobportal::$_data['sorting'] = ' city.name ';
                break;
            case 6: // created
                wpjobportal::$_data['sorting'] = ' resume.created ';
                break;
            case 7: // status
                wpjobportal::$_data['sorting'] = ' resume.status ';
                break;
        }
        if (wpjobportal::$_data['sortby'] == 1) {
            wpjobportal::$_data['sorting'] .= ' ASC ';
        } else {
            wpjobportal::$_data['sorting'] .= ' DESC ';
        }
        wpjobportal::$_data['combosort'] = wpjobportal::$_data['sorton'];
    }


    function sorting() {
        $pagenum = WPJOBPORTALrequest::getVar('pagenum');
        wpjobportal::$_data['sorton'] = wpjobportal::$_search['resumes']['sorton'];
        wpjobportal::$_data['sortby'] = wpjobportal::$_search['resumes']['sortby'];
        switch (wpjobportal::$_data['sorton']) {
            case 1: // appilcation title
                wpjobportal::$_data['sorting'] = ' app.application_title ';
                break;
            case 2: // first name
                wpjobportal::$_data['sorting'] = ' app.first_name ';
                break;
            case 3: // category
                wpjobportal::$_data['sorting'] = ' cat.cat_title ';
                break;
            case 4: // job type
                wpjobportal::$_data['sorting'] = ' app.jobtype ';
                break;
            case 5: // location
                wpjobportal::$_data['sorting'] = ' city.name ';
                break;
            case 6: // created
                wpjobportal::$_data['sorting'] = ' app.created ';
                break;
            case 7: // status
                wpjobportal::$_data['sorting'] = ' app.status ';
                break;
        }
        if (wpjobportal::$_data['sortby'] == 1) {
            wpjobportal::$_data['sorting'] .= ' ASC ';
        } else {
            wpjobportal::$_data['sorting'] .= ' DESC ';
        }
        wpjobportal::$_data['combosort'] = wpjobportal::$_data['sorton'];
    }

    function getAllUnapprovedEmpApps() {
        $this->sorting();
        //Filter
        $searchtitle = wpjobportal::$_search['resumes']['searchtitle'];
        $searchname = wpjobportal::$_search['resumes']['searchname'];
        $searchjobcategory = wpjobportal::$_search['resumes']['searchjobcategory'];
        $searchjobtype = wpjobportal::$_search['resumes']['searchjobtype'];
        $searchjobsalaryrange = wpjobportal::$_search['resumes']['searchjobsalaryrange'];
        $status = wpjobportal::$_search['resumes']['status'];
        $datestart = wpjobportal::$_search['resumes']['datestart'];
        $dateend = wpjobportal::$_search['resumes']['dateend'];
        $featured = wpjobportal::$_search['resumes']['featured'];

        wpjobportal::$_data['filter']['searchtitle'] = $searchtitle;
        wpjobportal::$_data['filter']['searchname'] = $searchname;
        wpjobportal::$_data['filter']['searchjobcategory'] = $searchjobcategory;
        wpjobportal::$_data['filter']['searchjobtype'] = $searchjobtype;
        wpjobportal::$_data['filter']['searchjobsalaryrange'] = $searchjobsalaryrange;
        wpjobportal::$_data['filter']['status'] = $status;
        wpjobportal::$_data['filter']['datestart'] = $datestart;
        wpjobportal::$_data['filter']['dateend'] = $dateend;
        wpjobportal::$_data['filter']['featured'] = $featured;

        if ($searchjobcategory)
            if (is_numeric($searchjobcategory) == false)
                return false;
        if ($searchjobtype)
            if (is_numeric($searchjobtype) == false)
                return false;
        if ($searchjobsalaryrange)
            if (is_numeric($searchjobsalaryrange) == false)
                return false;

        $inquery = "";
        if ($searchtitle)
            $inquery .= " AND LOWER(app.application_title) LIKE '%" . esc_sql($searchtitle) . "%'";
        if ($searchname) {
            $inquery .= " AND (";
            $inquery .= " LOWER(app.first_name) LIKE '%" . esc_sql($searchname) . "%'";
            $inquery .= " OR LOWER(app.last_name) LIKE '%" . esc_sql($searchname) . "%'";
            //$inquery .= " OR LOWER(app.middle_name) LIKE '%" . esc_sql($searchname) . "%'";
            $inquery .= " )";
        }
        if (is_numeric($searchjobcategory))
            $inquery .= " AND app.job_category = " . esc_sql($searchjobcategory);
        if (is_numeric($searchjobtype))
            $inquery .= " AND app.jobtype = " . esc_sql($searchjobtype);
        if (is_numeric($searchjobsalaryrange))
            $inquery .= " AND app.jobsalaryrangetype = " . esc_sql($searchjobsalaryrange);
        if ($status != null) {
            if (is_numeric($status))
                $inquery .= " AND app.status = " . esc_sql($status);
        }

        if ($datestart != null) {
            $datestart = gmdate('Y-m-d',strtotime($datestart));
            $inquery .= " AND DATE(app.created) >=  '" . esc_sql($datestart) . "' ";
        }

        if ($dateend != null) {
            $dateend = gmdate('Y-m-d',strtotime($dateend));
            $inquery .= " AND DATE(app.created) <=  '" . esc_sql($dateend) . "'";
        }
        
        $curdate = gmdate('Y-m-d');
        if ($featured != null) {
            $inquery .= " AND app.isfeaturedresume = 1 AND DATE(app.startfeatureddate) <= '".esc_sql($curdate)."' AND DATE(app.endfeatureddate) >= '".esc_sql($curdate)."'";
        }

        //Pagination
        $query = "SELECT COUNT(id) FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS app
                WHERE (app.status = 0) AND app.quick_apply <> 1";
        $query.=$inquery;

        $total = wpjobportaldb::get_var($query);
        wpjobportal::$_data['total'] = $total;
        wpjobportal::$_data[1] = WPJOBPORTALpagination::getPagination($total);

        //Data
        $query = "SELECT app.photo,app.id,app.salaryfixed as salaryfixed, app.application_title,app.first_name, app.last_name, app.jobtype,
                app.created, app.status, app.isfeaturedresume,app.endfeatureddate, cat.cat_title,jobtype.title AS jobtypetitle,city.id as city,jobtype.color as color
            FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS app
            LEFT JOIN " . wpjobportal::$_db->prefix . "wj_portal_categories AS cat ON app.job_category = cat.id
            LEFT JOIN " . wpjobportal::$_db->prefix . "wj_portal_jobtypes AS jobtype    ON app.jobtype = jobtype.id
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = (SELECT address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = app.id ORDER BY id DESC LIMIT 1)

            WHERE (app.status = 0 OR app.isfeaturedresume = 0 ) AND app.quick_apply <> 1 ";
        $query.=$inquery;
        $query.=" ORDER BY " . wpjobportal::$_data['sorting'];
        $query.=" LIMIT " . WPJOBPORTALpagination::$_offset . "," . WPJOBPORTALpagination::$_limit;
        wpjobportal::$_data[0] = wpjobportaldb::get_results($query);
        wpjobportal::$_data['fields'] = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforView(3);
        return;
    }

    function getUserStatsResumes($resumeuid) {
        if (is_numeric($resumeuid) == false)
            return false;
        //pagination
        $query = "SELECT COUNT(resume.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS resume WHERE resume.uid =" . esc_sql($resumeuid);
        $total = wpjobportaldb::get_var($query);
        wpjobportal::$_data['total'] = $total;
        wpjobportal::$_data[1] = WPJOBPORTALpagination::getPagination($total);

        //Data
        $query = "SELECT resume.id,resume.application_title,resume.first_name,resume.last_name,cat.cat_title,resume.created,resume.status
                    FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS resume
                    LEFT JOIN " . wpjobportal::$_db->prefix . "wj_portal_categories AS cat ON cat.id=resume.job_category
                    WHERE resume.uid = " . esc_sql($resumeuid);
        $query .= " ORDER BY resume.first_name";
        $query.=" LIMIT " . WPJOBPORTALpagination::$_offset . "," . WPJOBPORTALpagination::$_limit;

        wpjobportal::$_data[0] = wpjobportaldb::get_results($query);
        return;
    }

    function getResumeSearch() {
        //Filters
        $title = WPJOBPORTALrequest::getVar('title');
        $name = WPJOBPORTALrequest::getVar('name');
        $nationality = WPJOBPORTALrequest::getVar('nationality');
        $gender = WPJOBPORTALrequest::getVar('gender');
        $iamavailable = WPJOBPORTALrequest::getVar('iamavailable', 0); // b/c when checkbox is unchecked it remain get its last value
        $jobcategory = WPJOBPORTALrequest::getVar('jobcategory');
        $jobtype = WPJOBPORTALrequest::getVar('jobtype');
        $education = WPJOBPORTALrequest::getVar('heighestfinisheducation');
        $currency = WPJOBPORTALrequest::getVar('currency');
        $zipcode = WPJOBPORTALrequest::getVar('zipcode');
        $jobstatus = WPJOBPORTALrequest::getVar('jobstatus');

        wpjobportal::$_data['filter']['title'] = $title;
        wpjobportal::$_data['filter']['name'] = $name;
        wpjobportal::$_data['filter']['nationality'] = $nationality;
        wpjobportal::$_data['filter']['gender'] = $gender;
        wpjobportal::$_data['filter']['iamavailable'] = $iamavailable;
        wpjobportal::$_data['filter']['jobcategory'] = $jobcategory;
        wpjobportal::$_data['filter']['jobtype'] = $jobtype;
        wpjobportal::$_data['filter']['heighestfinisheducation'] = $education;
        wpjobportal::$_data['filter']['currency'] = $currency;
        wpjobportal::$_data['filter']['zipcode'] = $zipcode;
        wpjobportal::$_data['filter']['jobstatus'] = $jobstatus;

        if ($gender != '')
            if (is_numeric($gender) == false)
                return false;
        if ($iamavailable != '')
            if (is_numeric($iamavailable) == false)
                return false;
        if ($jobcategory != '')
            if (is_numeric($jobcategory) == false)
                return false;
        if ($jobtype != '')
            if (is_numeric($jobtype) == false)
                return false;
        if ($jobsalaryrange != '')
            if (is_numeric($jobsalaryrange) == false)
                return false;
        if ($education != '')
            if (is_numeric($education) == false)
                return false;

        if ($currency != '')
            if (is_numeric($currency) == false)
                return false;
        if ($zipcode != '')
            if (is_numeric($zipcode) == false)
                return false;

        $wherequery = '';
        if ($title != '')
            $wherequery .= " AND resume.application_title LIKE '%" . esc_sql(wpjobportalphplib::wpJP_str_replace("'", "", $title)) . "%'";
        if ($name != '') {
            $wherequery .= " AND (";
            $wherequery .= " LOWER(resume.first_name) LIKE '%" . esc_sql($name) . "%'";
            $wherequery .= " OR LOWER(resume.last_name) LIKE '%" . esc_sql($name) . "%'";
            //$wherequery .= " OR LOWER(resume.middle_name) LIKE '%" . esc_sql($name) . "%'";
            $wherequery .= " )";
        }

        if ($nationality != '' && is_numeric($nationality))
            $wherequery .= " AND resume.nationality = '" . esc_sql($nationality) . "'";
        if ($gender != '' && is_numeric($gender))
            $wherequery .= " AND resume.gender = " . esc_sql($gender);
        if ($iamavailable != '' && is_numeric($iamavailable))
            $wherequery .= " AND resume.iamavailable = " . esc_sql($iamavailable);
        if ($jobcategory != '' && is_numeric($jobcategory))
            $wherequery .= " AND resume.job_category = " . esc_sql($jobcategory);
        if ($jobtype != '' && is_numeric($jobtype))
            $wherequery .= " AND resume.jobtype = " . esc_sql($jobtype);
        if ($jobsalaryrange != '' && is_numeric($jobsalaryrange))
            $wherequery .= " AND resume.jobsalaryrange = " . esc_sql($jobsalaryrange);

        //Pagination
        $query = "SELECT count(resume.id)
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON resume.job_category = cat.id
                WHERE resume.status = 1 AND resume.searchable = 1 ";
        $query .= $wherequery;

        $total = wpjobportaldb::get_var($query);
        wpjobportal::$_data['total'] = $total;
        wpjobportal::$_data[1] = WPJOBPORTALpagination::getPagination($total);

        //Data
        $query = "SELECT resume.*, cat.cat_title, jobtype.title AS jobtypetitle
                , salary.rangestart, salary.rangeend , currency.symbol
                ,salarytype.title AS salarytype
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON resume.job_category = cat.id
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON resume.jobtype = jobtype.id
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_currencies` AS currency ON currency.id = resume.currencyid
               ";
        $query .= "WHERE resume.status = 1 AND resume.searchable = 1 ";
        $query .= $wherequery;
        $query.=" LIMIT " . WPJOBPORTALpagination::$_offset . "," . WPJOBPORTALpagination::$_limit;

        wpjobportal::$_data[0] = wpjobportaldb::get_results($query);
        return;
    }

    function rejectQueueAllResumesModel($id, $actionid) {
        /*
         * *  4 for All
         */
        if (!is_numeric($id))
            return false;
        $result = $this->rejectQueueResumeModel($id);
        return $result;
    }

    function approveQueueAllResumesModel($id, $actionid) {
        /*
         * *  4 for All
         */
        if (!is_numeric($id))
            return false;
        $result = $this->approveQueueResumeModel($id);
        return $result;
    }

    function rejectQueueResumeModel($id) {
        if (is_numeric($id) == false) return false;
        $row = WPJOBPORTALincluder::getJSTable('resume');
        if($row->load($id)){
            $row->columns['status'] = -1;
            if(!$row->store()){
                return WPJOBPORTAL_REJECT_ERROR;
            }
        }else{
            return WPJOBPORTAL_REJECT_ERROR;
        }
        WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, 2, $id); //3 for resume. 2 for resume approve or reject
        return WPJOBPORTAL_REJECTED;
    }

    function rejectQueueFeatureResumeModel($id) {
        if (is_numeric($id) == false) return false;
        $row = WPJOBPORTALincluder::getJSTable('resume');
        if($row->load($id)){
            $row->columns['isfeaturedresume'] = -1;
            if(!$row->store()){
                return WPJOBPORTAL_REJECT_ERROR;
            }
        }else{
            return WPJOBPORTAL_REJECT_ERROR;
        }
        WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, 4, $id); //3 for resume. 4 for feature resume approve or reject
        return WPJOBPORTAL_REJECTED;
    }

    function approveQueueResumeModel($id) {
        if (is_numeric($id) == false)
            return false;
        $row = WPJOBPORTALincluder::getJSTable('resume');
        if($row->load($id)){
            $row->columns['status'] = 1;
            if(!$row->store()){
                return WPJOBPORTAL_APPROVE_ERROR;
            }
        }else{
            return WPJOBPORTAL_APPROVE_ERROR;
        }
        WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, 2, $id); //3 for resume. 3 for resume approve or reject
        return WPJOBPORTAL_APPROVED;
    }

    function approveQueueFeatureResumeModel($id) {
        if (is_numeric($id) == false)
            return false;
        $row = WPJOBPORTALincluder::getJSTable('resume');
        if($row->load($id)){
            $row->columns['isfeaturedresume'] = 1;
            if(!$row->store()){
                return WPJOBPORTAL_APPROVE_ERROR;
            }
        }else{
            return WPJOBPORTAL_APPROVE_ERROR;
        }
        WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, 4, $id); //3 for resume. 4 for feature resume approve or reject
        return WPJOBPORTAL_APPROVED;
    }

    function getResumes_Widget($resumetype, $noofresumes) {
        if ((!is_numeric($resumetype)) || ( !is_numeric($noofresumes)))
            return false;


        if ($resumetype == 1) { //newest
            $inquery = ' ORDER BY resume.created DESC ';
        } elseif ($resumetype == 2) { //top
            $inquery = ' ORDER BY resume.hits DESC ';
        } elseif ($resumetype == 4) { //featurerd
            $inquery = ' AND resume.isfeaturedresume = 1 AND DATE(resume.endfeatureddate) >= CURDATE() ';
            $inquery .= ' ORDER BY resume.created DESC ';
        } else {
            return []; // '' was casuing issues
        }

        $id = "resume.id AS id";
        $alias = ",CONCAT(resume.alias,'-',resume.id) AS resumealiasid ";
        $query = "SELECT resume.id AS resumeid,
                $id, resume.application_title AS applicationtitle, CONCAT(resume.first_name,' ', resume.last_name) AS name, resume.photo,jobtype.color as jobtypecolor
                ,resume.created AS created , cat.cat_title, jobtype.title AS jobtypetitle,nationality.name AS nationalityname
                $alias,(SELECT address.address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address WHERE address.resumeid = resume.id LIMIT 1) AS city,resume.email_address

                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON resume.job_category = cat.id
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON resume.jobtype = jobtype.id
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS nationality ON nationality.id=resume.nationality
                WHERE resume.status = 1 ";
        $query .= $inquery;
        if ($noofresumes != -1 && is_numeric($noofresumes))
            $query .=" LIMIT " . esc_sql($noofresumes);

        $results = wpjobportaldb::get_results($query);
        foreach ($results as $d) {
            $d->location = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView($d->city);
        }
        return $results;
    }

     function isYoursResume($id, $uid) {
        if (!is_numeric($id))
            return false;
        if (current_user_can( 'manage_options' )){
            return true;
        }
        if (WPJOBPORTALincluder::getObjectClass('user')->isguest()) {
            $conflag = wpjobportal::$_config->getConfigurationByConfigName('visitor_can_add_resume');
            if ($conflag == 1) {
                if (isset($_SESSION['wp-wpjobportal']) && isset($_SESSION['wp-wpjobportal']['resumeid'])) {
                    if ($id == $_SESSION['wp-wpjobportal']['resumeid']) {
                        return true;
                    } else {
                        return false;
                    }
                }
            }
        }
        if (!is_numeric($uid))
            return false;
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($id) . " AND uid = ". esc_sql($uid);
        $result = wpjobportaldb::get_var($query);
        if ($result == 0)
            return false;
        else
            return true;
    }

    function cancelResumeSectionAjax() {
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'cancel-resume-section-ajax') ) {
            die( 'Security check Failed' );
        }
        $section = WPJOBPORTALrequest::getVar('section');
        $data = WPJOBPORTALrequest::get('post');
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        $data['uid'] = $uid;
        $resumeid = $data['resumeid'];
        $objectid = $data['sectionid'];
        if ($section != 'skills' && $section != 'resume' && $section != 'personal')
            if ($objectid)
                if (!is_numeric($objectid))
                    return false;
        $result = null;
        $resumelayout = WPJOBPORTALincluder::getObjectClass('resumeformlayout');
        $fieldsordering = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforForm(3); // resume fields
        wpjobportal::$_data[2] = array();
        foreach ($fieldsordering AS $field) {
            wpjobportal::$_data[2][$field->section][$field->field] = $field->required;
        }
        switch ($section) {
            case 'addresses':
                if (is_numeric($objectid))
                    wpjobportal::$_data[0]['address_section'][0] = $this->getResumeAddressSection($resumeid, $uid, $objectid);
                else
                    wpjobportal::$_data[0]['address_section'][0] = '';
                $result = $resumelayout->getAddressesSection(0, 1);
                break;
            case 'institutes':
                if (is_numeric($objectid))
                    wpjobportal::$_data[0]['institute_section'][0] = apply_filters('wpjobportal_addons_getResume_action_ajx_adm',false,'getResumeInstituteSection',$resumeid,$uid,$sectionid);
                else
                    wpjobportal::$_data[0]['institute_section'][0] = '';
                $result = apply_filters('wpjobportal_addons_view_resume_by_section_resume',false,'getEducationSection');
                break;
            case 'employers':
                if (is_numeric($objectid))
                    wpjobportal::$_data[0]['employer_section'][0] = $this->getResumeEmployerSection($resumeid, $uid, $objectid);
                else
                    wpjobportal::$_data[0]['employer_section'][0] = '';
                $result = $resumelayout->getEmployerSection(0, 1);
                break;
            case 'languages':
                if (is_numeric($objectid))
                    wpjobportal::$_data[0]['language_section'][0] = apply_filters('wpjobportal_addons_getResume_action_ajx_adm',false,'getResumeLanguageSection',$resumeid,$uid,$objectid);
                else
                    wpjobportal::$_data[0]['language_section'][0] = '';
                $result = apply_filters('wpjobportal_addons_view_resume_by_section_resume',false,'getLanguageSection');
                break;
            case 'skills':
                    if(in_array('advanceresumebuilder', wpjobportal::$_active_addons)){
                        wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($resumeid, $uid);
                        $result = apply_filters('wpjobportal_addons_view_resume_by_section_resume',false,'getSkillSection');
                    }
                break;
            case 'personal':
                wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($resumeid, $uid);
                wpjobportal::$_data[0]['file_section'] = $this->getResumeFilesSection($resumeid, $uid);
                wpjobportal::$_data['resumecontactdetail'] = true;
                $result = $resumelayout->getPersonalTopSection(1, 0);
                $result .= '<div class="resume-section-title personal"><img class="heading-img" src="' . esc_url(WPJOBPORTAL_PLUGIN_URL) . 'includes/images/personal-info.png" />' . esc_html(__('Personal information', 'wp-job-portal')) . '</div>';
                $result .= $resumelayout->getPersonalSection(0);
                break;
        }
        if ($section != 'skills' && $section != 'resume' && $section != 'personal') {
            $canadd = $this->canAddMoreSection($uid, $resumeid, $section);
            $anchor = '<a class="add" data-section="' . $section . '"> + ' . esc_html(__('Add New', 'wp-job-portal')) . ' ' . wpjobportal::wpjobportal_getVariableValue($section) . '</a>';
        } else {
            $canadd = 0;
            $anchor = '';
        }
        $array = wp_json_encode(array('html' => $result, 'canadd' => $canadd, 'anchor' => $anchor));
        return $array;
    }

    function captchaValidate() {
        if (!is_user_logged_in()) {
            $config_array = wpjobportal::$_config->getConfigByFor('captcha');
            if ($config_array['resume_captcha'] == 1) {
                if ($config_array['captcha_selection'] == 1) { // Google recaptcha
                    $gresponse = WPJOBPORTALrequest::getVar('g-recaptcha-response','post');
                    $resp = googleRecaptchaHTTPPost($config_array['recaptcha_privatekey'] , $gresponse);

                    if ($resp) {
                        return true;
                    } else {
                        wpjobportal::$_data['google_captchaerror'] = esc_html(__("Invalid captcha",'wp-job-portal'));
                        return false;
                    }

                } else { // own captcha
                    $captcha = new WPJOBPORTALcaptcha;
                    $result = $captcha->checkCaptchaUserForm();
                    if ($result == 1) {
                        return true;
                    } else {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    function getDataForParams($section, $data) {
        //custom field code start
        $userfieldforjob = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3, $section);
        $params = array();
        foreach ($userfieldforjob AS $ufobj) {
            $vardata = isset($data[$ufobj->field]) ? $data[$ufobj->field] : '';
            if($vardata != ''){
                if($ufobj->userfieldtype == 'multiple'){
                    $vardata = wpjobportalphplib::wpJP_explode(',', $vardata[0]); // fixed index
                }
                if(is_array($vardata)){
                    $vardata = implode(', ', $vardata);
                }
                $params[$ufobj->field] = wpjobportalphplib::wpJP_htmlspecialchars($vardata);
            }
        }
        if (!empty($params)) {
            $params = wp_json_encode($params);
            return $params;
        } else {
            return false;
        }
        //custom field code end
    }

    function saveResumeSectionAjax() {
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'save-resume-section-ajax') ) {
            die( 'Security check Failed' );
        }
        $section = WPJOBPORTALrequest::getVar('section');
        $data = WPJOBPORTALrequest::get('post');
        if(!current_user_can('manage_options')){
            $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
            $data['uid'] = $uid;
        }else{
			$uid = $this->getUidByResumeId($data['resumeid']);
			$data['uid'] = $uid;
		}
        $resumeid = $data['resumeid'];
        $row = null;
        switch ($section) {
            case 'personal':
                $row = WPJOBPORTALincluder::getJSTable('resume');
                $data['id'] = $resumeid;
                $params = $this->getDataForParams(1, $data);
                $data['params'] = $params == false ? '' : $params;
                break;
            case 'addresses':
                $row = WPJOBPORTALincluder::getJSTable('resumeaddress');
                $params = $this->getDataForParams(2, $data);
                $data['params'] = $params == false ? '' : $params;
                break;
            case 'institutes':
                $row = WPJOBPORTALincluder::getJSTable('resumeinstitute');
                $params = $this->getDataForParams(3, $data);
                $data['params'] = $params == false ? '' : $params;
                break;
            case 'employers':
                $row = WPJOBPORTALincluder::getJSTable('resumeemployer');
                $params = $this->getDataForParams(4, $data);
                $data['params'] = $params == false ? '' : $params;
                break;
            // case 'references':
            //     $row = WPJOBPORTALincluder::getJSTable('resumereference');
            //     $params = $this->getDataForParams(7, $data);
            //     $data['params'] = $params == false ? '' : $params;
            //     break;
            case 'languages':
                $row = WPJOBPORTALincluder::getJSTable('resumelanguage');
                $params = $this->getDataForParams(8, $data);
                $data['params'] = $params == false ? '' : $params;
                break;
        }
        if ($row != null) {
            if ($section == 'personal') { // b/c of form ajax loop we have to unset the photo field if no photo selected
                if (isset($_FILES['photo']) && $_FILES['photo']['size'] > 0) {
                    //empty here to make it simple to understand
                } else {
                    unset($data['photo']);
                }
                if (empty($data['id'])) {
                    $data['alias'] = wpjobportalphplib::wpJP_str_replace(' ', '-', $data['application_title']);
                    $data['created'] = gmdate('Y-m-d H:i:s');
                    $data['status'] = wpjobportal::$_config->getConfigurationByConfigName('empautoapprove');
                } else {
                    if(current_user_can('manage_options')){
                        $data['status'] = $data['status'];
                    }else{
                        $row = WPJOBPORTALincluder::getJSTable('resume');
                        $row->load($data['id']);
                        $data['status'] = $row->status;
                    }
                }
                if(!empty($data['date_of_birth']))
                    $data['date_of_birth'] = gmdate('Y-m-d H:i:s',strtotime($data['date_of_birth']));
                if(!empty($data['date_start']))
                    $data['date_start'] = gmdate('Y-m-d H:i:s',strtotime($data['date_start']));
				$query = "SELECT * FROM " . wpjobportal::$_db->prefix . "wj_portal_fieldsordering WHERE field =  'searchable' AND fieldfor =3";
				$record = wpjobportal::$_db->get_row($query);
				if($record->published == 0 AND is_user_logged_in()){
					$data['searchable'] = 1;
				}elseif($record->isvisitorpublished == 0){
					$data['searchable'] = 1;
				}
                if (!$this->captchaValidate()) {
                    WPJOBPORTALMessages::setLayoutMessage(esc_html(__('Incorrect Captcha code', 'wp-job-portal')), 'error',$this->getMessagekey());
                    $array = wp_json_encode(array('html' => 'error'));
                    return $array;
                }
            }
            $data = wpjobportal::wpjobportal_sanitizeData($data);
            if (!$row->bind($data)) {
                return WPJOBPORTAL_SAVE_ERROR;
            }
            if (!$row->store()) {
                return WPJOBPORTAL_SAVE_ERROR;
            }
            $objectid = $row->id;
            if ($section == 'personal') {
                $resumeid = $row->id;
            }
            //Check for the resume photo && files upload
            if ($section == 'personal') {
                if (isset($_FILES['photo'])) {
                    $this->uploadPhoto($objectid);
                }
                if (isset($_FILES['resumefiles'])) {
                    $this->uploadResume($objectid);
                }
                // Save resumeid in session in case of visitor add resume is allowed
                if (WPJOBPORTALincluder::getObjectClass('user')->isguest()) {
                    $visitor_can_add_resume = wpjobportal::$_config->getConfigurationByConfigName('visitor_can_add_resume');
                    if ($visitor_can_add_resume == 1) {
                        $_SESSION['wp-wpjobportal']['resumeid'] = $resumeid;
                    }
                }
                //Update credits log in case of new resume
                if ($data['resumeid'] == '') {
                    $actionid = $data['creditid'];
                }
            }
        } elseif ($section == 'skills') {
            $skills = WPJOBPORTALrequest::getVar('skills');
// RESUME SKILL CUSTOM FIELD
            $params = $this->getDataForParams(5, $data);
            if(!is_numeric($resumeid)){
                return false;
            }
            $pquery = "SELECT params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($resumeid);
            $parmsvar = wpjobportal::$_db->get_var($pquery);
            $parray = array();
            if (isset($parmsvar) && !empty($parmsvar)) {
                $parray = json_decode($parmsvar);
            }
            if (isset($params) && !empty($params)) {
                $params = json_decode($params);
            }
            $params = (object) array_merge((array) $params, (array) $parray);
            $params = wp_json_encode($params);
            $queryparams = " , params='" . $params . "' ";
//END
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_resume` SET skills='" . esc_sql($skills) . "' " . $queryparams . " WHERE id = ".esc_sql($resumeid);
            wpjobportal::$_db->query($query);
        } elseif ($section == 'resume') {
// RESUME SKILL CUSTOM FIELD
            $params = $this->getDataForParams(6, $data);
            $pquery = "SELECT params FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($resumeid);
            $parmsvar = wpjobportal::$_db->get_var($pquery);
            $parray = array();
            if (isset($parmsvar) && !empty($parmsvar)) {
                $parray = json_decode($parmsvar);
            }
            if (isset($params) && !empty($params)) {
                $params = json_decode($params);
            }
            $params = (object) array_merge((array) $params, (array) $parray);
            $params = wp_json_encode($params);
            $queryparams = " , params='" . $params . "' ";
//END
            $resume = WPJOBPORTALrequest::getVar('resume');
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_resume` SET resume='" . esc_sql($resume) . "' " .$queryparams." WHERE id = ".esc_sql($resumeid);
            wpjobportal::$_db->query($query);
        }
        $result = null;
        $resumelayout = WPJOBPORTALincluder::getObjectClass('resumeformlayout');
        $fieldsordering = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforForm(3); // resume fields
        wpjobportal::$_data[2] = array();
        foreach ($fieldsordering AS $field) {
            wpjobportal::$_data[2][$field->section][$field->field] = $field->required;
        }
        switch ($section) {
            case 'addresses':
                wpjobportal::$_data[0]['address_section'][0] = $this->getResumeAddressSection($resumeid, $uid, $objectid);
                $result = $resumelayout->getAddressesSection(0, 1);
                break;
            case 'institutes':
                wpjobportal::$_data[0]['institute_section'][0] = apply_filters('wpjobportal_addons_getResume_action_ajx_adm',false,'getResumeInstituteSection',$resumeid,$uid,$objectid);
                $result = apply_filters('wpjobportal_addons_view_resume_by_section_resume',false,'getEducationSection');
                break;
            case 'employers':
                wpjobportal::$_data[0]['employer_section'][0] = $this->getResumeEmployerSection($resumeid, $uid, $objectid);
                $result = $resumelayout->getEmployerSection(0, 1);
                break;
            case 'languages':
                wpjobportal::$_data[0]['language_section'][0] = apply_filters('wpjobportal_addons_getResume_action_ajx_adm',false,'getResumeLanguageSection',$resumeid,$uid,$objectid);
                $result = apply_filters('wpjobportal_addons_view_resume_by_section_resume',false,'getLanguageSection');
                break;
            case 'skills':
                if(in_array('advanceresumebuilder', wpjobportal::$_active_addons)){
                    wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($resumeid, $uid);
                    $result = apply_filters('wpjobportal_addons_view_resume_by_section_resume',false,'getSkillSection');
                }
                break;
            case 'resume':
                wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($resumeid, $uid);
                $result = $resumelayout->getResumeSection(0, 1);
                break;
            case 'personal':
                wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($resumeid, $uid);
                wpjobportal::$_data[0]['file_section'] = $this->getResumeFilesSection($resumeid, $uid);
                wpjobportal::$_data['resumecontactdetail'] = true;
                $result = $resumelayout->getPersonalTopSection(1, 0);
                $result .= '<div class="resume-section-title personal"><img class="heading-img" src="' . esc_url(WPJOBPORTAL_PLUGIN_URL) . 'includes/images/personal-info.png" />' . esc_html(__('Personal information', 'wp-job-portal')) . '</div>';
                $result .= $resumelayout->getPersonalSection(0);
                break;
        }
        if ($section != 'skills' && $section != 'resume' && $section != 'personal') {
            $canadd = $this->canAddMoreSection($uid, $resumeid, $section);
            $anchor = '<a class="add" data-section="' . $section . '"> + ' . esc_html(__('Add New', 'wp-job-portal')) . ' ' . wpjobportal::wpjobportal_getVariableValue($section) . '</a>';
        } else {
            $canadd = 0;
            $anchor = '';
        }
        //send email

        if($section == 'personal' && empty($data['id'])){
            WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3,1,$resumeid); // 3 for resume,1 for add new resume
        }
        $array = wp_json_encode(array('html' => $result, 'canadd' => $canadd, 'anchor' => $anchor, 'resumeid' => $resumeid));
        return $array;
    }

    function deleteResumeSectionAjax() {
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'delete-resume-section-ajax') ) {
            die( 'Security check Failed' );
        }
        $section = WPJOBPORTALrequest::getVar('section');
        $data = WPJOBPORTALrequest::get('post');
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        $data['uid'] = $uid;
        $resumeid = $data['resumeid'];
        $row = null;
        switch ($section) {
            case 'languages':
                $row = WPJOBPORTALincluder::getJSTable('resumelanguage');
                break;
            // case 'references':
            //     $row = WPJOBPORTALincluder::getJSTable('resumereference');
            //     break;
            case 'employers':
                $row = WPJOBPORTALincluder::getJSTable('resumeemployer');
                break;
            case 'institutes':
                $row = WPJOBPORTALincluder::getJSTable('resumeinstitute');
                break;
            case 'addresses':
                $row = WPJOBPORTALincluder::getJSTable('resumeaddress');
                break;
        }
        $msg = esc_html(__('Section has been deleted', 'wp-job-portal'));
        $result = 1;
        if ($this->isYoursResume($resumeid, $uid)) {
            if (!$row->delete($data['sectionid'])) {
                $msg = esc_html(__('Error deleting section', 'wp-job-portal'));
                $result = 0;
            }
        }
        $canadd = $this->canAddMoreSection($uid, $resumeid, $section);
        $anchor = '<a class="add" data-section="' . $section . '"> + ' . esc_html(__('Add New', 'wp-job-portal')) . ' ' . wpjobportal::wpjobportal_getVariableValue($section) . '</a>';
        $array = wp_json_encode(array('canadd' => $canadd, 'msg' => $msg, 'result' => $result, 'anchor' => $anchor));
        return $array;
    }

    function canAddMoreSection($uid, $resumeid, $section) {
        $config_array = wpjobportal::$_config->getConfigByFor('resume');
        if (!is_numeric($resumeid))
            return false;
        if (!is_numeric($uid))
            return false;
        switch ($section) {
            case 'languages':
                $tablename = 'wj_portal_resumelanguages';
                $count = $config_array['max_resume_languages'];
                break;
            // case 'references':
            //     // $tablename = 'wj_portal_resumereferences';
            //     // $count = $config_array['max_resume_references'];
            //     break;
            case 'employers':
                $tablename = 'wj_portal_resumeemployers';
                $count = $config_array['max_resume_employers'];
                break;
            case 'institutes':
                $tablename = 'wj_portal_resumeinstitutes';
                $count = $config_array['max_resume_institutes'];
                break;
            case 'addresses':
                $tablename = 'wj_portal_resumeaddresses';
                $count = $config_array['max_resume_addresses'];
                break;
        }
        $query = "SELECT COUNT(sec.id)
                    FROM `" . wpjobportal::$_db->prefix . $tablename . "` AS sec
                    JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume ON resume.id = sec.resumeid
                    WHERE sec.resumeid = " . esc_sql($resumeid);
        $visallowed = 0;
        if (WPJOBPORTALincluder::getObjectClass('user')->isguest()) {
            if ($config_array['visitor_can_add_resume'] == 1) {
                $visallowed = 1;
            }
        }
        if ($uid && $visallowed = 0) {
            $query .= " AND resume.uid = ". esc_sql($uid);
        }
        $total = wpjobportal::$_db->get_var($query);
        if ($count > $total) {
            return 1;
        } else {
            return 0;
        }
    }

    function getResumeSectionAjax() {
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'get-resume-section-ajax') ) {
            die( 'Security check Failed' );
        }
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        $section = WPJOBPORTALrequest::getVar('section');
        $sectionid = WPJOBPORTALrequest::getVar('sectionid');
        $resumeid = WPJOBPORTALrequest::getVar('resumeid');
        $resumelayout = WPJOBPORTALincluder::getObjectClass('resumeformlayout');
        $fieldsordering = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforForm(3); // resume fields
        wpjobportal::$_data[2] = array();
        foreach ($fieldsordering AS $field) {
            wpjobportal::$_data[2][$field->section][$field->field] = $field->required;
        }

        $data = '';
        switch ($section) {
            case 'addresses':
                wpjobportal::$_data[0]['address_section'] = $this->getResumeAddressSection($resumeid, $uid, $sectionid);
                $data = $resumelayout->getAddressesSection(1, 1);
                break;
            case 'institutes':
                wpjobportal::$_data[0]['institute_section'] = apply_filters('wpjobportal_addons_getResume_action_ajx_adm',false,'getResumeInstituteSection',$resumeid,$uid,$sectionid);
                $data = apply_filters('wpjobportal_addons_view_resume_by_section_resume_ajx',false,'getEducationSection');
                break;
            case 'employers':
                wpjobportal::$_data[0]['employer_section'] = $this->getResumeEmployerSection($resumeid, $uid, $sectionid);
                $data = $resumelayout->getEmployerSection(1, 1);
                break;
            case 'languages':
                wpjobportal::$_data[0]['language_section'] = apply_filters('wpjobportal_addons_getResume_action_ajx_adm',false,'getResumeLanguageSection',$resumeid,$uid,$sectionid);
                $data = apply_filters('wpjobportal_addons_view_resume_by_section_resume_ajx',false,'getLanguageSection');
                break;
            case 'skills':
                if(in_array('advanceresumebuilder', wpjobportal::$_active_addons)){
                    wpjobportal::$_data[0]['personal_section'] =$this->getResumePersonalSection($resumeid, $uid, $sectionid);
                    $data = apply_filters('wpjobportal_addons_view_resume_by_section_resume_ajx',false,'getSkillSection');
                }
                break;
            case 'personal':
                wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($resumeid, $uid);
                wpjobportal::$_data[0]['file_section'] = $this->getResumeFilesSection($resumeid, $uid);
                $data = $resumelayout->getPersonalSection(1);
                break;
        }
        return $data;
    }

    private function getUidByResumeId($id) {
        if (!is_numeric($id)) return false;
        $query = "SELECT uid FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($id);
        $uid = wpjobportal::$_db->get_var($query);
        return $uid;
    }

    public function getResumeTitle($id) {
        if (!is_numeric($id)) return false;
        $query = "SELECT application_title FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($id);
        $uid = wpjobportal::$_db->get_var($query);
        return $uid;
    }

    function getResumeById($id) {
        if (WPJOBPORTALincluder::getObjectClass('user')->isemployer() || current_user_can( 'manage_options' )) { // Current user is employer
            $uid = $this->getUidByResumeId($id);
        } else {
			$userobject = WPJOBPORTALincluder::getObjectClass('user');
			if($userobject->isguest() || !$userobject->isWPJOBPORTALUser()){
                $uid = $this->getUidByResumeId($id);
            }else{
                $uid = $userobject->uid();
			}
        }
        if(isset($_COOKIE['wpjobportal_apply_visitor']) && is_numeric($_COOKIE['wpjobportal_apply_visitor']) && !is_user_logged_in()){
            $query = "SELECT job.id as id,job.endfeatureddate,job.id,job.uid,job.title,job.isfeaturedjob,job.serverid,job.noofjobs,job.city,job.status,job.currency,
                CONCAT(job.alias,'-',job.id) AS jobaliasid,job.created,job.serverid,company.name AS companyname,company.id AS companyid,company.logofilename,CONCAT(company.alias,'-',company.id) AS compnayaliasid,job.salarytype,job.salarymin,job.salarymax,salaryrangetype.title AS salarydurationtitle,
                cat.cat_title, jobtype.title AS jobtypetitle,salaryrangetype.title AS srangetypetitle,
                (SELECT count(jobapply.id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` AS jobapply
                 WHERE jobapply.jobid = job.id) AS resumeapplied ,job.params,job.startpublishing,job.stoppublishing
                 ,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job
                ".wpjobportal::$_company_job_table_join." JOIN `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS company ON company.id = job.companyid
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON cat.id = job.jobcategory
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = job.jobtype
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_salaryrangetypes` AS salaryrangetype ON salaryrangetype.id = job.salarytype WHERE job.id = " . sanitize_key($_COOKIE['wpjobportal_apply_visitor']);
            wpjobportal::$_data['jobinfo'] = wpjobportaldb::get_row($query);
            if(wpjobportal::$_data['jobinfo'] != ''){
                wpjobportal::$_data['jobinfo']->location = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView(wpjobportal::$_data['jobinfo']->city);
            }
            wpjobportal::$_data['fields'] = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforForm(2);
            wpjobportal::$_data['config'] = wpjobportal::$_config->getConfigByFor('job');
        }

        if (WPJOBPORTALincluder::getObjectClass('user')->isguest()) {

            // $guestallowed = wpjobportal::$_config->getConfigurationByConfigName('visitor_can_add_resume'); old code// problem
			$guestallowed = wpjobportal::$_config->getConfigurationByConfigName('visitorview_emp_viewresume');
            if ($guestallowed == 0)
                return false;
        }else {
            if($uid)
            if (is_numeric($uid) == false)
                return false;
        }
            if (($id != '') && ($id != 0)) {
                if (is_numeric($id) == false)
                    return false;
                global $job_portal_theme_options;
                // getting personal section
                wpjobportal::$_data[0]['personal_section'] = $this->getResumePersonalSection($id, $uid);
                // getting address section
                wpjobportal::$_data[0]['address_section'] = $this->getResumeAddressSection($id, $uid);
                // getting employer section
                wpjobportal::$_data[0]['employer_section'] = $this->getResumeEmployerSection($id, $uid);
                // getting institutes section
                wpjobportal::$_data[0]['institute_section'] = apply_filters('wpjobportal_addons_resume_by_user_adv',false,'getResumeInstituteSection',$id,$uid);
                // getting languages section
                wpjobportal::$_data[0]['language_section'] = apply_filters('wpjobportal_addons_resume_by_user_adv',false,'getResumeLanguageSection',$id,$uid);
               // getting file section
                wpjobportal::$_data[0]['file_section'] = $this->getResumeFilesSection($id, $uid);
                $theme = wp_get_theme();
            $layout = WPJOBPORTALrequest::getVar('wpjobportallt');
            $finalresume = array();
            if($layout == 'viewresume' && !wpjobportal::$_common->wpjp_isadmin() && !WPJOBPORTALincluder::getObjectClass('user')->isjobseeker()){ // hiding related resumes from jobseeker. no point in showing those to job seeker
                if(wpjobportal::$theme_chk != 0){
                    // Related Resumes data
                    $max = $job_portal_theme_options['maximum_relatedresume'];
                    if(!is_numeric($max)){
                        $max = 5;
                    }
                    $finalresume = array();
                    $relatedresume=array();
                    $layout =WPJOBPORTALrequest::getVar("wpjobportallt");
                    if ($layout != 'printresume') {
                        //var_dump($job_portal_theme_options['relatedresume_criteria_sorter']['enabled']);
                        foreach($job_portal_theme_options['relatedresume_criteria_sorter']['enabled'] AS $key => $value){
                            $inquery = '';
                            switch($key){
                                case 'category':
                                    if(wpjobportal::$_data[0]['personal_section']->job_category != '' && is_numeric(wpjobportal::$_data[0]['personal_section']->job_category)){

                                        $inquery = ' resume.job_category = ' . esc_sql(wpjobportal::$_data[0]['personal_section']->job_category);
                                    }
                                break;
                                case 'jobtype':
                                    if(wpjobportal::$_data[0]['personal_section']->jobtype != '' && is_numeric(wpjobportal::$_data[0]['personal_section']->jobtype)){
                                        $inquery = ' resume.jobtype = ' . esc_sql(wpjobportal::$_data[0]['personal_section']->jobtype);
                                    }
                                break;
                            }
                            if(!empty($inquery)){
                                $query = "SELECT resume.id,resume.uid,resume.application_title, resume.first_name, resume.last_name,resume.photo,resume.job_category, cat.cat_title AS categorytitle, jobtype.title AS jobtypetitle, resume.jobtype
                                        ,resume.params,resume.status,resume.created,LOWER(jobtype.title) AS jobtypetit
                                        ,resumeaddress.address_city, resumeaddress.address, resumeaddress.longitude, resumeaddress.latitude
                                        ,city.name AS cityname, state.name AS statename, country.name AS countryname ,resumeaddress.params
                                        ,resume.salaryfixed as salary,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor,resume.params
                                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON cat.id = resume.job_category
                                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS resumeaddress ON resumeaddress.resumeid = resume.id
                                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = resumeaddress.address_city
                                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
                                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid
                                        WHERE 1=1 AND ".$inquery." AND resume.id != ".esc_sql($id)." AND resume.quick_apply <> 1 GROUP BY resume.id LIMIT ".esc_sql($max);
                                        $result = wpjobportaldb::get_results($query);
                                        $relatedresume = array_merge($relatedresume, $result);
                                        $relatedresume = array_map('unserialize', array_unique(array_map('serialize', $relatedresume)));
                                        if(COUNT($relatedresume) >= $max){
                                            break;
                                        }
                            }
                        }
                    }
                    if(!empty($relatedresume)){
                        foreach ($relatedresume AS $d) {
                            $d->location = WPJOBPORTALincluder::getJSModel('common')->getLocationForView($d->cityname, $d->statename, $d->countryname);
                            //$d->salary = WPJOBPORTALincluder::getJSModel('common')->getSalaryRangeView($d->rangestart, $d->rangeend, $d->rangetype,$d->total_experience);
                            $finalresume[] = $d;
                        }
                    }
                    wpjobportal::$_data['relatedresume'] = $finalresume;
                }
                wpjobportal::$_data['relatedresume'] = $finalresume;
            }
        }
        wpjobportal::$_data['resumecontactdetail'] = true;
          if (WPJOBPORTALincluder::getObjectClass('user')->isguest() || (isset(wpjobportal::$_data[0]['personal_section']->uid) && wpjobportal::$_data[0]['personal_section']->uid != WPJOBPORTALincluder::getObjectClass('user')->uid())) {
                //$result = WPJOBPORTALincluder::getJSModel('credits')->getMinimumCreditIDByAction('view_resume_contact_detail');
                if (in_array('credits', wpjobportal::$_active_addons)) {
                    $subType = wpjobportal::$_config->getConfigValue('submission_type');
                    if($subType == 1){
                        wpjobportal::$_data['resumecontactdetail'] = true;
                    }elseif ($subType == 2 || $subType == 3) {
                        $contantdetail_paid = 1;
                        if($subType == 2){
                            if(!wpjobportal::$_config->getConfigValue('job_viewresumecontact_price_perlisting') > 0){
                                $contantdetail_paid = 0;
                            }
                        }
                        if($contantdetail_paid == 1){
                            wpjobportal::$_data['resumecontactdetail'] = $this->checkAlreadyViewResumeContactDetail($id);
                        }else{
                            wpjobportal::$_data['resumecontactdetail'] = true;
                        }
                    }
                }else{
                    wpjobportal::$_data['resumecontactdetail'] = true;
                }
                if(is_numeric($id) && $id > 0){
                    // if resume owner not viewing it then count the resume views, its shown on view resume page
                    $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_resume` SET hits = hits + 1 WHERE id = " . esc_sql($id);
                    wpjobportal::$_db->query($query);
                }
            }
             if(in_array('credits', wpjobportal::$_active_addons)){
                wpjobportal::$_data['paymentconfig'] = wpjobportal::$_wpjppaymentconfig->getPaymentConfigFor('paypal,stripe,woocommerce',true);
            }
            // code to show next back on view resume in case of job applied applitcation layout
            $jobapplyid = WPJOBPORTALrequest::getVar('jobapplyid');
            if(is_numeric($jobapplyid) && $jobapplyid > 0){

                // getting jobid and action_status to use in next query to get resumes with same data
                $query = "SELECT jobapply.jobid, jobapply.action_status
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` AS jobapply
                WHERE jobapply.id = " . esc_sql($jobapplyid);

                $job_apply_record = wpjobportaldb::get_row($query);
                if(!empty($job_apply_record) && is_numeric($job_apply_record->jobid) && is_numeric($job_apply_record->action_status)){
                    $query = "SELECT jobapply.cvid
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` AS jobapply
                        WHERE jobapply.jobid = " . esc_sql($job_apply_record->jobid) ." AND jobapply.action_status = ". esc_sql($job_apply_record->action_status)." ORDER BY jobapply.id DESC";
                    // cv ids that have same jobid and action_status
                    $job_apply_records_cvids = wpjobportal::$_db->get_col($query);

                    // index of current cv id to get next and back
                    $current_resume_index = array_search($id, $job_apply_records_cvids);
                    // the above function may return 0 as index value
                    if($current_resume_index !== FALSE){
                        wpjobportal::$_data['jobapply_resume_next'] = isset($job_apply_records_cvids[$current_resume_index + 1]) ? $job_apply_records_cvids[$current_resume_index + 1] : FALSE ;
                        wpjobportal::$_data['jobapply_resume_prev'] = isset($job_apply_records_cvids[$current_resume_index - 1]) ? $job_apply_records_cvids[$current_resume_index - 1] : FALSE ;
                        wpjobportal::$_data['jobapply_resume_jobapplyid'] = $jobapplyid;
                    }

                }

            }
        return;
    }

    function getResumePersonalSection($id, $uid) {
        if (!is_numeric($id))
            return false;
        if ($uid)
            if (!is_numeric($uid))
                return false;
        $query = "SELECT resume.id,resume.salaryfixed, resume.tags AS viewtags , resume.tags AS resumetags ,resume.uid,resume.application_title, resume.first_name, resume.last_name, resume.cell, resume.email_address, resume.nationality AS nationalityid, resume.photo, resume.gender, resume.job_category
                    , resume.skills, resume.keywords, cat.cat_title AS categorytitle, jobtype.title AS jobtypetitle,resume.jobtype
                    , resume.resume,nationality.name AS nationality
                    ,resume.params,resume.status,resume.hits AS resumehits ,resume.created,resume.searchable,LOWER(jobtype.title) AS jobtypetit,jobtype.color AS jobtypecolor,resume.quick_apply,resume.isfeaturedresume,resume.endfeatureddate
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON cat.id = resume.job_category
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS nationality ON nationality.id = resume.nationality
                    WHERE resume.id = " . esc_sql($id);
        $isguest = WPJOBPORTALincluder::getObjectClass('user')->isguest();
        $iswpjobportaluser = WPJOBPORTALincluder::getObjectClass('user')->isWPJOBPORTALUser();
        if(!$isguest && $iswpjobportaluser){
            if (!current_user_can( 'manage_options' ) && $uid) {
                $query .= " AND resume.uid = " . esc_sql($uid);
            }
        }
        $result = wpjobportaldb::get_row($query);
        if(!empty($result)){
            $result->resumetags = WPJOBPORTALincluder::getJSModel('common')->makeFilterdOrEditedTagsToReturn($result->resumetags);
        }
        return $result;
    }

    function getResumeAddressSection($id, $uid, $sectionid = null) {
        if (!is_numeric($id))
            return false;
        if ($uid)
            if (!is_numeric($uid))
                return false;
        if (!$this->isYoursResume($id, $uid))
            return false;
        $query = "SELECT resumeaddress.id, resumeaddress.address_city, resumeaddress.address
                        , city.name AS cityname, state.name AS statename, country.name AS countryname ,resumeaddress.params,resumeaddress.longitude,resumeaddress.latitude
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` resumeaddress
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = resumeaddress.address_city
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid
                    WHERE resumeaddress.resumeid = " . esc_sql($id);
        if ($sectionid != null) {
            if (!is_numeric($sectionid))
                return false;
            $query .= ' AND resumeaddress.id = ' . esc_sql($sectionid);
            $result = wpjobportaldb::get_row($query);
        }else {
            $result = wpjobportaldb::get_results($query);
        }

        return $result;
    }

    function getResumeEmployerSection($id, $uid, $sectionid = null) {
        if (!is_numeric($id))
            return false;
        if ($uid)
            if (!is_numeric($uid))
                return false;
        if (!$this->isYoursResume($id, $uid))
            return false;
        $query = "SELECT employer.id, employer.employer, employer.employer_current_status,employer.employer_from_date, employer.employer_to_date, employer.employer_city,employer.employer_position
                    , employer.employer_phone, employer.employer_address
                    , city.name AS cityname,employer.params, state.name AS statename, country.name AS countryname,city.latitude,city.longitude
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeemployers` AS employer
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = employer.employer_city
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid
                    WHERE employer.resumeid = " . esc_sql($id);
        if ($sectionid != null) {
            if (!is_numeric($sectionid))
                return false;
            $query .= ' AND employer.id = ' . esc_sql($sectionid);
            $result = wpjobportaldb::get_row($query);
        }else {
            $result = wpjobportaldb::get_results($query);
        }
        return $result;
    }

    function getResumeFilesSection($id, $uid) {
        if (!is_numeric($id))
            return false;
        if ($uid)
            if (!is_numeric($uid))
                return false;
        if (!$this->isYoursResume($id, $uid))
            return false;
        $query = "SELECT *
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles`
                    WHERE resumeid = " . esc_sql($id);
        $result = wpjobportaldb::get_results($query);
        return $result;
    }

    function getResumeFiles() {
        $resumeid = (int) WPJOBPORTALrequest::getVar('resumeid');
        if(!is_numeric($resumeid)){
            return false;
        }
        $data_directory = wpjobportal::$_config->getConfigValue('data_directory');
        $files = array();
        $totalFilesQry = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` WHERE resumeid=" . esc_sql($resumeid);
        $filesFound = wpjobportaldb::get_results($totalFilesQry);
        if ($filesFound > 0) {
            $query = "SELECT * FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` WHERE resumeid = " . esc_sql($resumeid);
            $files = wpjobportaldb::get_results($query);
        }
        // resume form layout class
        include_once(WPJOBPORTAL_PLUGIN_PATH . '/includes/resumeformlayout.php');
        $resumeformlayout = new WPJOBPORTALResumeformlayout();
        $data = $resumeformlayout->getResumeFilesLayout($files, $data_directory);
        return $data;
    }

    function uploadResume($id) {
        if (is_numeric($id) == false)
            return false;
        WPJOBPORTALincluder::getObjectClass('uploads')->uploadResumeFiles($id);
        return;
    }

    function uploadPhoto($id) {
        if (is_numeric($id) == false)
            return false;
        WPJOBPORTALincluder::getObjectClass('uploads')->uploadResumePhoto($id);
        return;
    }

    function deleteResume($ids) {
        if (empty($ids))
            return false;
        $notdeleted = 0;
        $row = WPJOBPORTALincluder::getJSTable('resume');
        foreach ($ids as $id) {
            if(!is_numeric($id)){
                continue;
            }
            if ($this->resumeCanDelete($id) == true) {
                //code for preparing data for delete resume email
                $resultforsendmail = WPJOBPORTALincluder::getJSModel('resume')->getResumeInfoForEmail($id);
                $username = $resultforsendmail->firstname . '' . $resultforsendmail->lastname;
                if ($username == '') {
                    $username = $resultforsendmail->username;
                }
                $email = $resultforsendmail->useremailfromresume;
                if ($email == '') {
                    $email = $resultforsendmail->useremail;
                }
                $resumetitle = $resultforsendmail->resumetitle;
                $mailextradata = array();
                $mailextradata['resumetitle'] = $resumetitle;
                $mailextradata['jobseekername'] = $username;
                $mailextradata['useremail'] = $email;

                if (!$row->delete($id)) {
                    $notdeleted += 1;
                }
                $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = " . esc_sql($id);
                wpjobportaldb::query($query);
                $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeemployers` WHERE resumeid = " . esc_sql($id);
                wpjobportaldb::query($query);

                $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` WHERE resumeid = " . esc_sql($id);
                wpjobportaldb::query($query);
                $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeinstitutes` WHERE resumeid = " . esc_sql($id);
                wpjobportaldb::query($query);

                $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumelanguages` WHERE resumeid = " . esc_sql($id);
                wpjobportaldb::query($query);
                $wpdir = wp_upload_dir();
                $data_directory = wpjobportal::$_config->getConfigurationByConfigName('data_directory');
                array_map('wp_delete_file', glob($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id."/resume/*.*"));//deleting files
                array_map('wp_delete_file', glob($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id."/photo/*.*"));//deleting files
                if ( ! function_exists( 'WP_Filesystem' ) ) {
                    require_once ABSPATH . 'wp-admin/includes/file.php';
                }
                global $wp_filesystem;
                if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ) {
                    $creds = request_filesystem_credentials( site_url() );
                    wp_filesystem( $creds );
                }


                if ($wp_filesystem->exists($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id.'/resume')) {
                    @$wp_filesystem->rmdir($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id.'/resume');
                }
                if ($wp_filesystem->exists($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id.'/photo')) {
                    @$wp_filesystem->rmdir($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id.'/photo');
                }
                if ($wp_filesystem->exists($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id)) {
                    @$wp_filesystem->rmdir($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$id);
                }
                WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, 6, $id,$mailextradata); // 3 for resume,6 for DELETE resume
                // action hook for delete resume
                do_action('wpjobportal_after_delete_resume_hook',$id);
            }else{
                $notdeleted += 1;
            }
        }
        if ($notdeleted == 0) {
            WPJOBPORTALMessages::$counter = false;
            return WPJOBPORTAL_DELETED;
        } else {
            WPJOBPORTALMessages::$counter = $notdeleted;
            return WPJOBPORTAL_DELETE_ERROR;
        }
    }

    function resumeCanDelete($resumeid) {
        if (!is_numeric($resumeid))
            return false;
        if(!wpjobportal::$_common->wpjp_isadmin()){
            if(!$this->getIfResumeOwner($resumeid)){
                return false;
            }
        }
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` WHERE cvid = " . esc_sql($resumeid);
        $total = wpjobportaldb::get_var($query);
        if ($total > 0)
            return false;
        else
            return true;
    }

    function resumeEnforceDelete($resumeid, $uid) {
        if ($uid)
            if ((is_numeric($uid) == false) || ($uid == 0) || ($uid == ''))
                return false;
        if (is_numeric($resumeid) == false)
            return false;

        $juid = 0; // jobseeker uid
        $query = "DELETE  resume,apply,resumeaddress,resumeemployers,resumefiles
                            ,resumeinstitutes,resumelanguages";
        if(in_array('folder', wpjobportal::$_active_addons)){
            $query .= ",resumefolder";
        }
        if(in_array('message', wpjobportal::$_active_addons)){
            $query .= ",message";
        }

        $query .= " FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` AS apply ON resume.id=apply.cvid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS resumeaddress ON resume.id=resumeaddress.resumeid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeemployers` AS resumeemployers ON resume.id=resumeemployers.resumeid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` AS resumefiles ON resume.id=resumefiles.resumeid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeinstitutes` AS resumeinstitutes ON resume.id=resumeinstitutes.resumeid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumelanguages` AS resumelanguages ON resume.id=resumelanguages.resumeid";
        if(in_array('folder', wpjobportal::$_active_addons)){
            $query .= " LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_folderresumes` AS resumefolder ON 
                    resume.id=resumefolder.resumeid";
        }
        if(in_array('message', wpjobportal::$_active_addons)){
            $query .= " LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_messages` AS message ON
                    resume.id = message.resumeid ";
        }
        $query .= " WHERE resume.id = " . esc_sql($resumeid);
            //code for preparing data for delete resume email
                $resultforsendmail = WPJOBPORTALincluder::getJSModel('resume')->getResumeInfoForEmail($resumeid);
                $username = $resultforsendmail->firstname . ' ' . $resultforsendmail->lastname;
                if ($username == '') {
                    $username = $resultforsendmail->username;
                }
                $email = $resultforsendmail->useremailfromresume;
                if ($email == '') {
                    $email = $resultforsendmail->useremail;
                }
                $resumetitle = $resultforsendmail->resumetitle;

                $mailextradata['resumetitle'] = $resumetitle;
                $mailextradata['jobseekername'] = $username;
                $mailextradata['useremail'] = $email;

        if (!wpjobportaldb::query($query)) {
            return WPJOBPORTAL_DELETE_ERROR; //error while delete resume
        }

        $data_directory = wpjobportal::$_config->getConfigurationByConfigName('data_directory');
        $wpdir = wp_upload_dir();
        array_map('wp_delete_file', glob($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid."/resume/*.*"));//deleting files
        array_map('wp_delete_file', glob($wpdir['basedir'] . '/'. $data_directory . "/data/jobseeker/resume_".$resumeid."/photo/*.*"));//deleting files
        if ( ! function_exists( 'WP_Filesystem' ) ) {
            require_once ABSPATH . 'wp-admin/includes/file.php';
        }
        global $wp_filesystem;
        if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ) {
            $creds = request_filesystem_credentials( site_url() );
            wp_filesystem( $creds );
        }


        if($wp_filesystem->exists($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid.'/resume')) {
            $wp_filesystem->rmdir($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid.'/resume');
        }
        if($wp_filesystem->exists($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid.'/photo')) {
            $wp_filesystem->rmdir($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid.'/photo');
        }
        if($wp_filesystem->exists($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid)) {
            $wp_filesystem->rmdir($wpdir['basedir'] . '/' . $data_directory . "/data/jobseeker/resume_".$resumeid);
        }

        WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, 6, $resumeid,$mailextradata); // 3 for resume,6 for DELETE resume
        // action hook for delete resume
        do_action('wpjobportal_after_delete_resume_hook',$resumeid);
        return WPJOBPORTAL_DELETED;
    }

    function getResumeInfoForEmail($resumeid) {
        if ((is_numeric($resumeid) == false))
            return false;
        // changed join to left join to get mail data for visitor reumes
        $query = 'SELECT resume.application_title AS resumetitle, CONCAT(user.first_name," ",user.last_name) AS username
                        ,resume.email_address AS useremailfromresume
                        ,resume.first_name AS firstname, resume.last_name AS lastname
                        , resume.email_address AS useremail
                        FROM `' . wpjobportal::$_db->prefix . 'wj_portal_resume` AS resume
                        LEFT JOIN `' . wpjobportal::$_db->prefix . 'wj_portal_users` AS user ON user.id = resume.uid
                        WHERE resume.id = '.esc_sql($resumeid);
        $return_value = wpjobportaldb::get_row($query);
        return $return_value;
    }

    function empappReject($app_id) {
        if (is_numeric($app_id) == false)
            return false;

        $row = WPJOBPORTALincluder::getJSTable('resume');
        if(! $row->update(array('id' => $app_id , 'status' => -1))){
            return WPJOBPORTAL_DELETE_ERROR;
        }

        WPJOBPORTALincluder::getJSModel('emailtemplate')->sendMail(3, -1, $app_id);
        return WPJOBPORTAL_REJECTED;
    }

    function canAddResume($uid,$actionname='') {
        #User authentication submission
        if (!is_numeric($uid))
            return false;
        if(in_array('credits', wpjobportal::$_active_addons)){
            $credits = apply_filters('wpjobportal_addons_userpackages_module_wise',false,$uid,$actionname);
            if($credits){
                return true;
            }else{
                return false;
            }
        }else{
            return $this->checkAlreadyadd($uid);
        }
    }

    function getResumeTitleById($id) {
        if (!is_numeric($id))
            return false;
        $query = "SELECT resume.application_title FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume WHERE resume.id = " . esc_sql($id);
        $jobname = wpjobportal::$_db->get_var($query);
        return $jobname;
    }

    function getResumes($vars,$show_only_featured = 0,$ignore_serachable = 0) {
        //die('abc');
        $inquery = '';
        $jsformresumesearch = WPJOBPORTALrequest::getVar('jsformresumesearch');
        if (isset($jsformresumesearch) AND $jsformresumesearch == 1) {
            wpjobportal::$_data['issearchform'] = 1;
            wpjobportal::$_data['filter'] =  array();
        }

        if (isset($vars['category']) AND $vars['category'] != '') {
            $categoryid = $vars['category'];
            if (!is_numeric($categoryid))
                return false;
            $wpjp_query = "SELECT id FROM `" . wpjobportal::$_db->prefix . "wj_portal_categories` WHERE parentid = ". esc_sql($categoryid);
            $wpjp_cats = wpjobportaldb::get_results($wpjp_query);
            $wpjp_ids = [];
            foreach ($wpjp_cats as $wpjp_cat) {
                $wpjp_ids[] = $wpjp_cat->id;
            }
            $wpjp_ids[] = $categoryid;
            $wpjp_ids = implode(",",$wpjp_ids);
            $inquery = " AND resume.job_category IN(".$wpjp_ids.")";
            wpjobportal::$_data['filter']['category'] = $categoryid;
        }
        if (isset($vars['searchid']) AND $vars['searchid'] != '') {
            $search = $vars['searchid'];
            if (!is_numeric($search))
                return false;
            $inquery = $this->getSaveSearchForView($search);
            wpjobportal::$_data['filter']['search'] = $search;
        }
        if (isset($vars['tags']) AND $vars['tags'] != '') {
            wpjobportal::$_data['fromtags'] = $vars['tags'];
            $tags = $vars['tags'];
            $inquery = " AND resume.tags LIKE '%" . esc_sql($tags) . "%'";
            // to populate tags fields on the search form.
            wpjobportal::$_data['filter']['tag'] = WPJOBPORTALincluder::getJSModel('common')->makeFilterdOrEditedTagsToReturn($tags);
        }

        // ai resume search

        // variable to handle the resme data prepration overide
        $dont_prep_data = 0;

        $airesumesearcch = isset(wpjobportal::$_search['resumes']['airesumesearcch']) ? wpjobportal::$_search['resumes']['airesumesearcch'] : '';
        if ($airesumesearcch != '') {
        // AI search
            do_action('wpjobportal_addons_airesumesearch_query');
            if( !empty(wpjobportal::$_data['ai_resume_data_set']) ){
                $dont_prep_data = 1; // ignore the below code data is preped.
            }
        }

        // ai resume search

        // echo '<pre>';print_r(wpjobportal::$_search['resumes']);echo '</pre>';
        // echo '<pre>';print_r($vars);echo '</pre>';
        // variable to handle the resme data prepration overide
        if (isset($vars['aisuggestedresumes_job']) AND $vars['aisuggestedresumes_job'] != '') {
            do_action('wpjobportal_addons_aisuggestedresumes_resumes',$vars['aisuggestedresumes_job']);
            if( !empty(wpjobportal::$_data['ai_resume_data_set']) ){
                $dont_prep_data = 1; // ignore the below code data is preped.
            }
        }

        $this->sortingrescat();
        //variables form search form
            $title = isset(wpjobportal::$_search['resumes']['application_title']) ? wpjobportal::$_search['resumes']['application_title'] : '';
            if ($title != '') {
                $inquery .= ' AND resume.application_title LIKE "%' . esc_sql($title) . '%" ';
                wpjobportal::$_data['filter']['application_title'] = $title;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $firstName = isset(wpjobportal::$_search['resumes']['first_name']) ? wpjobportal::$_search['resumes']['first_name'] : '';
            if ($firstName != '') {
                $inquery .= ' AND resume.first_name LIKE "%' . esc_sql($firstName) . '%" ';
                wpjobportal::$_data['filter']['first_name'] = $firstName;
                wpjobportal::$_data['issearchform'] = 1;
            }
            $middle_name = isset(wpjobportal::$_search['resumes']['middle_name']) ? wpjobportal::$_search['resumes']['middle_name'] : '';
            $lastName = isset(wpjobportal::$_search['resumes']['last_name']) ? wpjobportal::$_search['resumes']['last_name'] : '';
            if ($lastName != '') {
                $inquery .= ' AND resume.last_name LIKE "%' . esc_sql($lastName) . '%" ';
                wpjobportal::$_data['filter']['last_name'] = $lastName;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $nationality = isset(wpjobportal::$_search['resumes']['nationality']) ? wpjobportal::$_search['resumes']['nationality'] : '';
            if ($nationality != '' && is_numeric($nationality)) {
                $inquery .= ' AND resume.nationality =' . esc_sql($nationality) . '';
                wpjobportal::$_data['filter']['nationality'] = $nationality;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $gender = isset(wpjobportal::$_search['resumes']['gender']) ? wpjobportal::$_search['resumes']['gender'] : '';
            if ($gender != '') {
                $inquery .= ' AND resume.gender LIKE "%' . esc_sql($gender) . '%" ';
                wpjobportal::$_data['filter']['gender'] = $gender;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $salaryfixed = isset(wpjobportal::$_search['resumes']['salaryfixed']) ? wpjobportal::$_search['resumes']['salaryfixed'] : '';
            if ($salaryfixed != '' && is_numeric($salaryfixed)) {
                $inquery .= ' AND resume.salaryfixed = "' . esc_sql($salaryfixed).'"';// non numric value casuing query error without quotes
                wpjobportal::$_data['filter']['salaryfixed'] = $salaryfixed;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $jobType = isset(wpjobportal::$_search['resumes']['jobtype']) ? wpjobportal::$_search['resumes']['jobtype'] : '';
            if ($jobType != '' && is_numeric($jobType)) {
                $inquery .= ' AND resume.jobtype = ' . esc_sql($jobType) . ' ';
                wpjobportal::$_data['filter']['jobtype'] = $jobType;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $salaryRangeType = isset(wpjobportal::$_search['resumes']['salaryrangetype']) ? wpjobportal::$_search['resumes']['salaryrangetype'] : '';
            if ($salaryRangeType != '' && is_numeric($salaryRangeType)) {
                $inquery .= ' AND resume.jobsalaryrangetype = ' . esc_sql($salaryRangeType) . '  ';
                wpjobportal::$_data['filter']['salaryrangetype'] = $salaryRangeType;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $category = isset(wpjobportal::$_search['resumes']['category']) ? wpjobportal::$_search['resumes']['category'] : '';
            if ($category != '' && is_numeric($category)) {
                $inquery .= ' AND resume.job_category = ' . esc_sql($category) . ' ';
                wpjobportal::$_data['filter']['category'] = $category;
                wpjobportal::$_data['issearchform'] = 1;
            }

            $zipCode = isset(wpjobportal::$_search['resumes']['zipcode']) ? wpjobportal::$_search['resumes']['zipcode'] : '';
            if ($zipCode) {
                wpjobportal::$_data['filter']['zipcode'] = $zipCode;
            }

            $keywords = isset(wpjobportal::$_search['resumes']['keywords']) ? wpjobportal::$_search['resumes']['keywords'] : '';
            if ($keywords) {
                $res = $this->makeQueryFromArray('keywords', $keywords);
                if ($res)
                    $inquery .= " AND ( " . $res . " )";
                wpjobportal::$_data['filter']['keywords'] = $keywords;
            }

            //Custom field search
            //start
            $data = wpjobportal::$_wpjpcustomfield->userFieldsData(3);/*apply_filters('wpjobportal_addons_customFields_user',false,3,'userFieldsData')*/;
            $valarray = array();
            if (!empty($data)) {
                foreach ($data as $uf) {
                    $session_userfield = isset(wpjobportal::$_search['resume_custom_fields'][$uf->field]) ? wpjobportal::$_search['resume_custom_fields'][$uf->field] : '';

                    $valarray[$uf->field] = $session_userfield;
                    if (isset($valarray[$uf->field]) && $valarray[$uf->field] != null && $valarray[$uf->field] !="" ) {
                        switch ($uf->userfieldtype) {
                            case 'text':
                            case 'email':
                                $inquery .= ' AND resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*' . wpjobportalphplib::wpJP_htmlspecialchars($valarray[$uf->field]) . '.*"\' ';
                                break;
                            case 'combo':
                                $inquery .= ' AND resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray[$uf->field]) . '"%\' ';
                                $or = " OR ";
                                break;
                            case 'depandant_field':
                                $inquery .= ' AND resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray[$uf->field]) . '"%\' ';
                                break;
                            case 'radio':
                                $inquery .= ' AND resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray[$uf->field]) . '"%\' ';
                                break;
                            case 'checkbox':
                                $finalvalue = '';
                                foreach($valarray[$uf->field] AS $value){
                                    $finalvalue .= $value.'.*';
                                }
                                $inquery .= ' AND resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*' . wpjobportalphplib::wpJP_htmlspecialchars($finalvalue) . '.*"\' ';
                                break;
                            case 'date':
                                if (isset($valarray[$uf->field]) && $valarray[$uf->field] != '') {
                                    $valarray[$uf->field] = gmdate('Y-m-d H:i:s',strtotime($valarray[$uf->field]));
                                }
                                $inquery .= ' AND resume.params LIKE \'%"' . esc_sql($uf->field) . '":"' . wpjobportalphplib::wpJP_htmlspecialchars($valarray[$uf->field]) . '"%\' ';
                                break;
                            case 'textarea':
                                $inquery .= ' AND resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*' . wpjobportalphplib::wpJP_htmlspecialchars($valarray[$uf->field]) . '.*"\' ';
                                break;
                            case 'multiple':
                                $finalvalue = '';
                                foreach($valarray[$uf->field] AS $value){
                                    if($value){
                                        $finalvalue .= $value.'.*';
                                    }
                                }
                                if($finalvalue){
                                    $inquery .= ' AND resume.params REGEXP \'"' . esc_sql($uf->field) . '":"[^"]*'.wpjobportalphplib::wpJP_htmlspecialchars($finalvalue).'"\'';
                                }
                                break;
                        }
                        wpjobportal::$_data['filter']['params'] = $valarray;
                        wpjobportal::$_data['issearchform'] = 1;
                    }
                }
            }
            //end
            $tags = WPJOBPORTALrequest::getVar('tags');
            if ($tags) {
                wpjobportal::$_data['filter']['tag'] = WPJOBPORTALincluder::getJSModel('common')->makeFilterdOrEditedTagsToReturn($tags);
                $res = $this->makeQueryFromArray('tags', $tags);
                if ($res)
                    $inquery .= " AND ( " . $res . " )";
            }
            $city = isset(wpjobportal::$_search['resumes']['city']) ? wpjobportal::$_search['resumes']['city'] : '';
            if ($city != '') {
                wpjobportal::$_data['filter']['city'] = WPJOBPORTALincluder::getJSModel('common')->getCitiesForFilter($city);
                $res = $this->makeQueryFromArray('city', $city);
                if ($res)
                    $inquery .= " AND ( " . $res . " )";
            }

            if($show_only_featured == 1){
                $inquery .= " AND resume.isfeaturedresume = 1 AND DATE(resume.endfeatureddate) >= CURDATE() ";
            }

        // shortcode options
        $noofresumes = '';
        $module_name = WPJOBPORTALrequest::getVar('wpjobportalme');
        if($module_name == 'allresumes'){
            //shortcode attribute proceesing (filter,ordering,no of resume)
            $attributes_query = $this->processShortcodeAttributesResume();
            if($attributes_query != ''){
                $inquery .= $attributes_query;
            }
            if(isset(wpjobportal::$_data['shortcode_option_no_of_resumes']) && wpjobportal::$_data['shortcode_option_no_of_resumes'] > 0){
                $noofresumes = wpjobportal::$_data['shortcode_option_no_of_resumes'];
            }
        }
        if($dont_prep_data == 0){
            //Pagination
            if($noofresumes == ''){
                $query = "SELECT COUNT(resume.id) AS total
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category ";
                    if($zipCode != ''){
                        $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON (address1.resumeid = resume.id AND address1.address_zipcode = '".esc_sql($zipCode)."' ) ";
                    }elseif ($city != '') {
                        $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON address1.resumeid = resume.id ";
                    }elseif (strstr($inquery, 'address1.address_city')) { // to handle shortcode option case for locations
                        $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON address1.resumeid = resume.id ";
                    }
                    $query .= " WHERE resume.status = 1 AND resume.quick_apply <> 1 ";
                    if($ignore_serachable == 0){
                        $query .= " AND resume.searchable = 1 ";
                    }
                $query .= $inquery;
                $total = wpjobportaldb::get_var($query);
                wpjobportal::$_data['total'] = $total;
                wpjobportal::$_data[1] = WPJOBPORTALpagination::getPagination($total,'resumes');
            }

            //Data
            $query = "SELECT resume.id,CONCAT(resume.alias,'-',resume.id) AS resumealiasid ,resume.first_name
                    ,resume.last_name,resume.application_title as applicationtitle,resume.email_address,category.cat_title
                    ,resume.created,jobtype.title AS jobtypetitle,resume.photo,
                    resume.isfeaturedresume,resume.endfeatureddate
                    ,resume.status,city.name AS cityname
                    ,state.name AS statename,resume.params,resume.salaryfixed as salary
                    ,resume.last_modified,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor,country.name AS countryname,resume.id as resumeid,resume.skills
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category ";
                if($zipCode != ''){
                    $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON (address1.resumeid = resume.id AND address1.address_zipcode = '".esc_sql($zipCode)."' ) ";
                }elseif ($city != '') {
                    $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON address1.resumeid = resume.id ";
                }elseif (strstr($inquery, 'address1.address_city')) { // to handle shortcode option case for locations
                    $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON address1.resumeid = resume.id ";
                }
                $query .= "
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = (SELECT address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = resume.id LIMIT 1)
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid ";
                    $query .= " WHERE resume.status = 1 AND resume.quick_apply <> 1";
                    if($ignore_serachable == 0){
                        $query .= " AND resume.searchable = 1 ";
                    }
            $query .= $inquery;
            $query .= " GROUP BY resume.id ";
            $query.= " ORDER BY " . wpjobportal::$_data['sorting'];
            if($noofresumes == ''){
                $query .=" LIMIT " . WPJOBPORTALpagination::$_offset . "," . WPJOBPORTALpagination::$_limit;
            }elseif(is_numeric($noofresumes)){
                $query .=" LIMIT " . esc_sql($noofresumes);
            }

            $results = wpjobportal::$_db->get_results($query);
            $data = array();
            foreach ($results AS $d) {
                //  updated the query select to select 'name' as cityname
                $d->location = WPJOBPORTALincluder::getJSModel('common')->getLocationForView($d->cityname, $d->statename, $d->countryname);
                $data[] = $d;
            }
            wpjobportal::$_data[0] = $data;
        }

        wpjobportal::$_data['config'] = wpjobportal::$_config->getConfigByFor('resume');
        wpjobportal::$_data[2] = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforSearch(3);
        wpjobportal::$_data['listingfields'] = wpjobportal::$_wpjpfieldordering->getFieldsForListing(3);
        // not counting the resume searches in transaction log
        return;
    }
    ///

    public function makeQueryFromArray($for, $array) {
        if (empty($array))
            return false;
        $qa = array();
        switch ($for) {
            case 'keywords':
                $array = wpjobportalphplib::wpJP_explode(",", $array);
                $total = count($array);
                for ($i = 0; $i < $total; $i++) {
                    $qa[] = "resume.keywords LIKE '%" . esc_sql(wpjobportalphplib::wpJP_trim($array[$i])) . "%'";
                }
                break;
            case 'tags':
                $array = wpjobportalphplib::wpJP_explode(',', $array);
                foreach ($array as $item) {
                    $qa[] = "resume.tags LIKE '%" . esc_sql($item) . "%'";
                }
                break;
            case 'city':
                $array = wpjobportalphplib::wpJP_explode(',', $array);
                foreach ($array as $item) {
                    if(is_numeric($item)){
                        $qa[] = " address1.address_city = " . esc_sql($item);
                    }
                }
                break;
        }
        $query = implode(" OR ", $qa);
        return $query;
    }

    function getAllResumeFiles() {
        $resumeid = WPJOBPORTALrequest::getVar('resumeid');
        // $resumeid = WPJOBPORTALincluder::getJSModel('common')->decodeIdForDownload($resumeid_string);

        if(!is_numeric($resumeid)){
            return false;
        }
        do_action('wpjobportal_load_wp_pcl_zip');
        $data_directory = wpjobportal::$_config->getConfigurationByConfigName('data_directory');
        $path = WPJOBPORTAL_PLUGIN_PATH . $data_directory;

        if ( ! function_exists( 'WP_Filesystem' ) ) {
            require_once ABSPATH . 'wp-admin/includes/file.php';
        }
        global $wp_filesystem;
        if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ) {
            $creds = request_filesystem_credentials( site_url() );
            wp_filesystem( $creds );
        }

        if (!$wp_filesystem->exists($path)) {
            WPJOBPORTALincluder::getJSModel('common')->makeDir($path);
        }
        $path .= '/zipdownloads';
        if (!$wp_filesystem->exists($path)) {
            WPJOBPORTALincluder::getJSModel('common')->makeDir($path);
        }
        $randomfolder = $this->getRandomFolderName($path);
        $path .= '/' . $randomfolder;
        if (!$wp_filesystem->exists($path)) {
            WPJOBPORTALincluder::getJSModel('common')->makeDir($path);
        }
        $archive = new PclZip($path . '/allresumefiles.zip');
        $wpdir = wp_upload_dir();
        $directory = $wpdir['basedir'] . '/' . $data_directory . '/data/jobseeker/resume_' . $resumeid . '/resume/';
        //$scanned_directory = array_diff(scandir($directory), array('..', '.'));// code seems reduntant but showing error on deleted resume file downloads
        $filelist = '';
        $query = "SELECT filename FROM `".wpjobportal::$_db->prefix."wj_portal_resumefiles` WHERE resumeid = ".esc_sql($resumeid);
        $files = wpjobportal::$_db->get_results($query);
        foreach ($files AS $file) {
            $filelist .= $directory . '/' . $file->filename . ',';
        }
        $filelist = wpjobportalphplib::wpJP_substr($filelist, 0, wpjobportalphplib::wpJP_strlen($filelist) - 1);
        $v_list = $archive->create($filelist, PCLZIP_OPT_REMOVE_PATH, $directory);
        if ($v_list == 0) {
            die("Error : '" . wp_kses($archive->errorInfo(),WPJOBPORTAL_ALLOWED_TAGS) . "'");
        }
        $file = $path . '/allresumefiles.zip';
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . wpjobportalphplib::wpJP_basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();//this was commented and causing problems
        flush();
        if ( ! function_exists( 'WP_Filesystem' ) ) {
            require_once ABSPATH . 'wp-admin/includes/file.php';
        }
        global $wp_filesystem;
        if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ) {
            $creds = request_filesystem_credentials( site_url() );
            wp_filesystem( $creds );
        }
        echo $wp_filesystem->get_contents($file);
        @wp_delete_file($file);
        $path = WPJOBPORTAL_PLUGIN_PATH . $data_directory;
        $path .= '/zipdownloads';
        $path .= '/' . $randomfolder;
        @wp_delete_file($path . '/index.html');


        $wp_filesystem->rmdir($path);
        exit();
    }

    function getResumeFileDownloadById($fileid) {

        //$fileid = WPJOBPORTALincluder::getJSModel('common')->decodeIdForDownload($fileid_string);

        if (!is_numeric($fileid))
            return false;
        $query = "SELECT filename,resumeid FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` WHERE id = " . esc_sql($fileid);
        $object = wpjobportal::$_db->get_row($query);
        if(empty($object) || !is_numeric($object->resumeid)){ // if the file record does not exsists.(was logging error on accesing properties for null/empty object)
            exit;
        }
        $data_directory = wpjobportal::$_config->getConfigurationByConfigName('data_directory');
        $wpdir = wp_upload_dir();
        $file =  $wpdir['basedir'] . '/' . $data_directory . '/data/jobseeker/resume_' . $object->resumeid . '/resume/' . $object->filename;

        if ( ! function_exists( 'WP_Filesystem' ) ) {
            require_once ABSPATH . 'wp-admin/includes/file.php';
        }
        global $wp_filesystem;
        if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ) {
            $creds = request_filesystem_credentials( site_url() );
            wp_filesystem( $creds );
        }

        if (!$wp_filesystem->exists($file)) {// if file does not exsit then stop executing code(handling log errors)
            exit;
        }

        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . wpjobportalphplib::wpJP_basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
//        ob_clean();
        flush();
        echo $wp_filesystem->get_contents($file);
        exit();
    }

    function getRandomFolderName($path) {
        if ( ! function_exists( 'WP_Filesystem' ) ) {
            require_once ABSPATH . 'wp-admin/includes/file.php';
        }
        global $wp_filesystem;
        if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base') ) {
            $creds = request_filesystem_credentials( site_url() );
            wp_filesystem( $creds );
        }

        $match = '';
        do {
            $rndfoldername = "";
            $length = 5;
            $possible = "2346789bcdfghjkmnpqrtvwxyzBCDFGHJKLMNPQRTVWXYZ";
            $maxlength = wpjobportalphplib::wpJP_strlen($possible);
            if ($length > $maxlength) {
                $length = $maxlength;
            }
            $i = 0;
            while ($i < $length) {
                $char = wpjobportalphplib::wpJP_substr($possible, wp_rand(0, $maxlength - 1), 1);
                if (!wpjobportalphplib::wpJP_strstr($rndfoldername, $char)) {
                    if ($i == 0) {
                        if (ctype_alpha($char)) {
                            $rndfoldername .= $char;
                            $i++;
                        }
                    } else {
                        $rndfoldername .= $char;
                        $i++;
                    }
                }
            }
            $folderexist = $path . '/' . $rndfoldername;
            if ($wp_filesystem->exists($folderexist))
                $match = 'Y';
            else
                $match = 'N';
        }while ($match == 'Y');

        return $rndfoldername;
    }

    function getResumenameById($resumeid) {
        if (!is_numeric($resumeid))
            return false;
        $query = "SELECT resume.application_title FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume WHERE resume.id = " . esc_sql($resumeid);
        $resumename = wpjobportal::$_db->get_var($query);
        return $resumename;
    }

    function addViewContactDetail($resumeid, $uid) {
        $profileid = 0;
        if(wpjobportalphplib::wpJP_strstr($resumeid, 'jssc-')){
            $array = wpjobportalphplib::wpJP_explode('-', $resumeid);
            $profileid = $array[1];
            $resumeid = 0;
        }
        if (!is_numeric($profileid))
            return false;
        if (!is_numeric($resumeid))
            return false;
        if (!is_numeric($uid))
            return false;
        $curdate = gmdate('Y-m-d H:i:s');
        $row = WPJOBPORTALincluder::getJSTable('employerviewresume');
        $data = array();
        if(in_array('credits', wpjobportal::$_active_addons)){
            #Submission Type
            $subType = wpjobportal::$_config->getConfigValue('submission_type');
            if ($subType == 3) {
                #Membershipe Code for Featured Resume
                $packageid = WPJOBPORTALrequest::getVar('wpjobportal_packageid');
                # Package Filter's
                $package = apply_filters('wpjobportal_addons_userpackages_perfeaturemodule',false,$packageid,'remresumecontactdetail');
                if($package && !$package->expired && ($package->resumecontactdetail==-1 || $package->resumecontactdetail)){ //-1 = unlimited
                    #Data For Featured Company Member
                    $data['uid'] = $uid;
                    $data['resumeid'] = $resumeid;
                    $data['status'] = 1;
                    $data['created'] = $curdate;
                    $data['profileid'] = $profileid;
                    $data['userpackageid'] = $package->packageid;
                    $data = wpjobportal::wpjobportal_sanitizeData($data);
                    #Job sekker Company View
                    if($this->checkAlreadyViewResumeContactDetail($resumeid) == false){
                        if($row->bind($data)){
                            if($row->store()){
                                # Company Contact View Resume Transactio Log Entries--
                                $trans = WPJOBPORTALincluder::getJSTable('transactionlog');
                                $arr = array();
                                $arr['userpackageid'] = $package->id;
                                $arr['uid'] = $uid;
                                $arr['recordid'] = $resumeid;
                                $arr['type'] = 'resumecontactdetail';
                                $arr['created'] = current_time('mysql');
                                $arr['status'] = 1;
                                $trans->bind($arr);
                                $trans->store();
                                WPJOBPORTALmessages::setLayoutMessage(esc_html(__('You can view Resume Contact Detail Now','wp-job-portal')), 'updated',$this->getMessagekey());
                                return true;
                            }else{
                                return false;
                            }
                        }
                    }else{
                        return false;
                    }
                }else{
                    WPJOBPORTALmessages::setLayoutMessage(esc_html(__("There was some problem performing action",'wp-job-portal')), 'error',$this->getMessagekey());
                    return false;
                }
            }elseif ($subType == 2) {
                # Paid Perlisting
                $data['status']  == 3;
            }elseif ($status == 1) {
                # Free
                $data['status'] == 1;
            }

        }
        $data['uid'] = $uid;
        $data['resumeid'] = $resumeid;
        if(!isset($data['status'])){
            $data['status'] = 1;
        }
        $data['created'] = $curdate;
        $data['profileid'] = $profileid;
        $data = wpjobportal::wpjobportal_sanitizeData($data);
        if (!$row->bind($data)) {
            return false;
        }

        if($row->store()){
            return true;
        }else{
            return false;
        }
    }

    function getOrdering() {
        $sort = WPJOBPORTALrequest::getVar('sortby', '', null);
        if ($sort == null) {
            $id = WPJOBPORTALrequest::getVar('wpjobportalid');
            if ($id != null) {
                $array = wpjobportalphplib::wpJP_explode('_', $id);
                if ($array[1] == '14') {
                    $sort = $array[0];
                }
            }
        }else{
            $array = wpjobportalphplib::wpJP_explode('_', $sort);
            if (isset($array[1]) && $array[1] == '14') {
                $sort = $array[0];
            }
        }
        if ($sort == null) {
            $sort = 'posteddesc';
        }

        $this->getListOrdering($sort);
        $this->getListSorting($sort);
    }

    function getListOrdering($sort) {
        switch ($sort) {
            case "titledesc":
                wpjobportal::$_ordering = "resume.application_title DESC";
                wpjobportal::$_sorton = "title";
                wpjobportal::$_sortorder = "DESC";
                break;
            case "titleasc":
                wpjobportal::$_ordering = "resume.application_title ASC";
                wpjobportal::$_sorton = "title";
                wpjobportal::$_sortorder = "ASC";
                break;
            case "jobtypedesc":
                wpjobportal::$_ordering = "jobtype.title DESC";
                wpjobportal::$_sorton = "jobtype";
                wpjobportal::$_sortorder = "DESC";
                break;
            case "jobtypeasc":
                wpjobportal::$_ordering = "jobtype.title ASC";
                wpjobportal::$_sorton = "jobtype";
                wpjobportal::$_sortorder = "ASC";
                break;
            case "salarydesc":
                wpjobportal::$_ordering = "salaryrangestart.rangestart DESC";
                wpjobportal::$_sorton = "salary";
                wpjobportal::$_sortorder = "DESC";
                break;
            case "salaryasc":
                wpjobportal::$_ordering = "salaryrangestart.rangestart ASC";
                wpjobportal::$_sorton = "salary";
                wpjobportal::$_sortorder = "ASC";
                break;
            case "posteddesc":
                wpjobportal::$_ordering = "resume.created DESC";
                wpjobportal::$_sorton = "posted";
                wpjobportal::$_sortorder = "DESC";
                break;
            case "postedasc":
                wpjobportal::$_ordering = "resume.created ASC";
                wpjobportal::$_sorton = "posted";
                wpjobportal::$_sortorder = "ASC";
                break;
            default: wpjobportal::$_ordering = "resume.created DESC";
        }
        return;
    }

    function getSortArg($type, $sort) {
        $mat = array();
        if (wpjobportalphplib::wpJP_preg_match("/(\w+)(asc|desc)/i", $sort, $mat)) {
            if ($type == $mat[1]) {
                return ( $mat[2] == "asc" ) ? "{$type}desc" : "{$type}asc";
            } else {
                return $type . $mat[2];
            }
        }
        return "iddesc";
    }

    function getListSorting($sort) {
        wpjobportal::$_sortlinks['title'] = $this->getSortArg("title", $sort);
        wpjobportal::$_sortlinks['salary'] = $this->getSortArg("salary", $sort);
        wpjobportal::$_sortlinks['jobtype'] = $this->getSortArg("jobtype", $sort);
        wpjobportal::$_sortlinks['posted'] = $this->getSortArg("posted", $sort);
        return;
    }

    function removeResumeFileById() {
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'remove-resume-file-by-id') ) {
            die( 'Security check Failed' );
        }
        $id = WPJOBPORTALrequest::getVar('id');
        if (!is_numeric($id))
            return false;
        if(current_user_can('manage_options')){
            $uid = ' resume.uid ';
        }else{
            $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        }
        $query = "SELECT COUNT(file.id) AS file, resume.id AS resumeid, file.filename
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                    JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` AS file ON file.resumeid = resume.id
                    WHERE resume.uid = ". esc_sql($uid)." AND file.id = " . esc_sql($id);
        $file = wpjobportal::$_db->get_row($query);
        if ($file->file > 0) { // You are the owner
            $query = "DELETE FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` WHERE id = " . esc_sql($id);
            wpjobportal::$_db->query($query);
            $wpdir = wp_upload_dir();
            $data_directory = wpjobportal::$_config->getConfigurationByConfigName('data_directory');
            $file = $wpdir['basedir'] . '/' . $data_directory . '/data/jobseeker/resume_' . $file->resumeid . '/resume/' . $file->filename;
            @wp_delete_file($file);
            return true;
        }
        return false;
    }

    function getRssResumes() {
        $resume_rss = wpjobportal::$_config->getConfigurationByConfigName('resume_rss');
        if ($resume_rss == 1) {
            $curdate = date_i18n('Y-m-d H:i:s');
            $query = "SELECT resume.id,resume.application_title,resume.photo,resume.first_name,resume.last_name,
                        resume.email_address,cat.cat_title,resume.gender,
                        CONCAT(resume.alias,'-',resume.id) AS resumealiasid
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON resume.job_category = cat.id
                        ";
            $result = wpjobportal::$_db->get_results($query);
            foreach ($result AS $rs) {
                if(!is_numeric($rs->id)){
                    continue;
                }
                $query = "SELECT filename,filetype,filesize FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumefiles` WHERE resumeid = " . esc_sql($rs->id);
                $rs->filename = wpjobportal::$_db->get_results($query);
            }
            return $result;
        }
        var_dump($query);
        //return false;
    }
    function makeResumeSeo($resume_seo , $wpjobportalid){
        if(empty($resume_seo))
            return '';

        $common = WPJOBPORTALincluder::getJSModel('common');
        $id = $common->parseID($wpjobportalid);
        if(! is_numeric($id))
            return '';

        $result = '';
        $resume_seo = wpjobportalphplib::wpJP_str_replace( ' ', '', $resume_seo);
        $resume_seo = wpjobportalphplib::wpJP_str_replace( '[', '', $resume_seo);
        $array = wpjobportalphplib::wpJP_explode(']', $resume_seo);

        $total = count($array);
        if($total > 3)
            $total = 3;

        for ($i=0; $i < $total; $i++) {
            $query = '';
            switch ($array[$i]) {
                case 'title':
                    $query = "SELECT application_title AS col FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE id = " . esc_sql($id);
                break;
                case 'category':
                    $query = "SELECT category.cat_title AS col
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category
                        WHERE resume.id = " . esc_sql($id);
                break;
                case 'location':
                    $locationquery = "SELECT ra.address_city AS col
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS ra
                        JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume ON resume.id = ra.resumeid
                        WHERE resume.id = " . esc_sql($id);
                break;
            }

            if($array[$i] == 'location'){
                $rows = wpjobportaldb::get_results($locationquery);
                $location = '';
                foreach ($rows as $row) {
                    if($row->col != '' && is_numeric($row->col)){
                        $query = "SELECT name FROM `" . wpjobportal::$_db->prefix . "wj_portal_cities` WHERE id = ". esc_sql($row->col);
                        $cityname = wpjobportaldb::get_row($query);
                        if(isset($cityname->name)){
                            if($location == '')
                                $location .= $cityname->name;
                            else
                                $location .= ' '.$cityname->name;
                        }
                    }
                }
                $location = $common->removeSpecialCharacter($location);
                // if url encoded string is different from the orginal string dont add it to url
                $val = $location;
                $test_val = urlencode($val);
                if($val != $test_val){
                    continue;
                }
                if($location != ""){
                    if($result == '')
                        $result .= wpjobportalphplib::wpJP_str_replace(' ', '-', $location);
                    else{
                        $result .= '-'.wpjobportalphplib::wpJP_str_replace(' ', '-', $location);
                    }
                }
            }else{
                if($query){
                    $data = wpjobportaldb::get_row($query);
                    if(isset($data->col)){
                        $val = $common->removeSpecialCharacter($data->col);
                        // if url encoded string is different from the orginal string dont add it to url
                        $test_val = urlencode($val);
                        if($val != $test_val){
                            continue;
                        }
                        if($result == '')
                            $result .= wpjobportalphplib::wpJP_str_replace(' ', '-', $val);
                        else
                            $result .= '-'.wpjobportalphplib::wpJP_str_replace(' ', '-', $val);
                    }
                }
            }
        }
        if($result != ''){
            $result = wpjobportalphplib::wpJP_str_replace('_', '-', $result);
        }
        return $result;
    }


    function makeResumeSeoDocumentTitle($resume_seo , $wpjobportalid){
        if(empty($resume_seo))
            return '';

        $common = wpjobportal::$_common;
        $id = $common->parseID($wpjobportalid);
        if(! is_numeric($id))
            return '';
        $result = '';

        $application_title = '';
        $category_title = '';
        $jobtype_title = '';
        $resume_location = '';

        $query = "SELECT resume.application_title, category.cat_title AS resumecategory,jobtype.title AS resumejobtype
                        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category
                        LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                        WHERE resume.id = " . esc_sql($id);


        $data = wpjobportaldb::get_row($query);

        if(!empty($data)){
            $resume_location = '';
            $query = "SELECT city.name AS cityname
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` resumeaddress
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = resumeaddress.address_city
                WHERE resumeaddress.resumeid = " . esc_sql($id);
                $city_data = wpjobportaldb::get_results($query);
            if(!empty($city_data)){
                //  updated the query select to select 'name' as cityname
                foreach ($city_data as $key => $city) {
                    if($resume_location == ''){
                        $resume_location .= $city->cityname;
                    }else{
                        $resume_location .= ', '.$city->cityname;
                    }
                }
            }
            $application_title = $data->application_title;
            $category_title = $data->resumecategory;
            $jobtype_title = $data->resumejobtype;
            $matcharray = array(
                '[applicationtitle]' => $application_title,
                '[jobcategory]' => $category_title,
                '[jobtype]' => $jobtype_title,
                '[location]' => $resume_location,
                '[separator]' => '-',
                '[sitename]' => get_bloginfo( 'name', 'display' )
            );
            $result = $this->replaceMatches($resume_seo,$matcharray);

            //echo var_dump($result);die("3499");

        }

        return $result;
    }


    function replaceMatches($string, $matcharray) {
        foreach ($matcharray AS $find => $replace) {
            $string = wpjobportalphplib::wpJP_str_replace($find, $replace, $string);
        }
        return $string;
    }


    //getAllRoleLessUsersAjax

   function getMyResumes($uid) {
        if (!is_numeric($uid))
            return false;
        $this->sortingrescat();
        //$this->getOrdering();
        $query = "SELECT COUNT(resume.id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category
                WHERE resume.uid =". esc_sql($uid)." AND resume.quick_apply <> 1 ";
        $total = wpjobportaldb::get_var($query);
        if(!in_array('multiresume', wpjobportal::$_active_addons) && $total > 1){
            $total = 1;
        }
        wpjobportal::$_data['total'] = $total;
        wpjobportal::$_data[1] = WPJOBPORTALpagination::getPagination($total,'myresume');

        $query = "SELECT resume.id,resume.first_name,resume.last_name,resume.application_title as applicationtitle,CONCAT(resume.alias,'-',resume.id) resumealiasid,resume.email_address,category.cat_title,resume.created,jobtype.title AS jobtypetitle,resume.photo,resume.salaryfixed as salary,
                resume.isfeaturedresume,resume.status,city.name AS cityname,state.name AS statename,country.name AS countryname,resume.id as resumeid,resume.endfeatureddate,resume.params,resume.last_modified,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor,resume.skills
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = (SELECT address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = resume.id LIMIT 1)
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid
                WHERE resume.uid = ". esc_sql($uid)." AND resume.quick_apply <> 1 ";
        if(in_array('multiresume', wpjobportal::$_active_addons)){
            $query.= " ORDER BY " . wpjobportal::$_data['sorting'];
            $query.=" LIMIT " . WPJOBPORTALpagination::$_offset . "," . WPJOBPORTALpagination::$_limit;
        }else{
            $query.=" ORDER BY resume.id ASC LIMIT 0,1 ";
        }
        $results = wpjobportal::$_db->get_results($query);
        $data = array();
        foreach ($results AS $d) {//  updated the query select to select 'name' as cityname
            $d->location = wpjobportal::$_common->getLocationForView($d->cityname, $d->statename, $d->countryname);
            $data[] = $d;
        }
        wpjobportal::$_data['fields'] = WPJOBPORTALincluder::getJSModel('fieldordering')->getFieldsOrderingforView(3);
        wpjobportal::$_data[0] = $data;
        wpjobportal::$_data['config'] = wpjobportal::$_config->getConfigByFor('resume');
        wpjobportal::$_data['listingfields'] = WPJOBPORTALincluder::getJSModel('fieldordering')->getFieldsForListing(3);
        // to handle left menu/ my resume page add resume link case
        $query = "SELECT resume.id as resumeid
                    FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS resume
                    WHERE `uid`='".esc_sql($uid)."' AND resume.quick_apply <> 1
                    GROUP BY resume.id  ORDER BY resume.id ASC LIMIT 0,1 "; // made the condition same as to remove inconsistency
        wpjobportal::$_data['resumeid'] = wpjobportaldb::get_var($query);
        return;
    }


    function getResumeByCategory() {
        $query = "SELECT category.cat_title, CONCAT(category.alias,'-',category.id) AS aliasid,category.serverid,category.id AS categoryid
            ,(SELECT count(resume.id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                where resume.job_category = category.id AND resume.status = 1 AND resume.searchable = 1 AND resume.quick_apply <> 1)  AS totaljobs
            FROM `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category
            WHERE category.isactive = 1 AND category.parentid = 0 ORDER BY category.ordering ASC";
        $categories = wpjobportaldb::get_results($query);
        $config_array = wpjobportal::$_config->getConfigByFor('category');

        $subcategory_limit = 3;
        if($config_array['subcategory_limit'] != ''){ // to handle float value in configuration
            $subcategory_limit = ceil($config_array['subcategory_limit']);
        }

        foreach($categories AS $category){
            $total = 0;
            if(!is_numeric($category->categoryid)){
                continue;
            }
            $query = "SELECT category.cat_title, CONCAT(category.alias,'-',category.id) AS aliasid,category.serverid
                ,(SELECT count(resume.id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                where resume.job_category = category.id AND resume.status = 1 AND resume.searchable = 1 AND resume.quick_apply <> 1)  AS totaljobs
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category
                WHERE category.isactive = 1 AND category.parentid = ".esc_sql($category->categoryid)." ORDER BY category.ordering ASC ";
            $subcats = wpjobportal::$_db->get_results($query);
            $i = 0;
            foreach ($subcats as $id => $scat) {
                $total += $scat->totaljobs;
                if($subcategory_limit <= $i){
                    unset($subcats[$id]);
                }
                $i++;
            }
            $category->subcat = $subcats;
            $category->total_sub_jobs = $total;
        }


        if(wpjobportal::$_configuration['job_resume_show_all_categories'] == 0){//conifguration based
            $final_arr = array();
            foreach ($categories as $job_category) {
                if($job_category->totaljobs != 0 || $job_category->total_sub_jobs != 0){
                    $final_arr[] = $job_category;
                }
            }
            $categories = $final_arr;
        }
        wpjobportal::$_data[0] = $categories;
        wpjobportal::$_data['config'] =  wpjobportal::$_config->getConfigByFor('category');
        return;
    }

    //function for resume files in jobapply email
    function getResumeFilesByResumeId($resumeid) { // by resumeid because files are stored in seperate table
        if (!is_numeric($resumeid)) return false;
        $query = "SELECT COUNT(id) FROM `".wpjobportal::$_db->prefix."wj_portal_resumefiles` WHERE resumeid=" . esc_sql($resumeid);

        $filesFound = wpjobportaldb::get_var($query);
        if ($filesFound > 0) {
           $query = "SELECT * FROM `".wpjobportal::$_db->prefix."wj_portal_resumefiles` WHERE resumeid = " . esc_sql($resumeid);

           $files = wpjobportaldb::get_results($query);
           return $files;
        } else {
           return false;
        }
    }

    function getResumeExpiryStatus($id) {
        if (!is_numeric($id))
            return false;
        $query = "SELECT resume.id
        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
        WHERE resume.status = 1 AND resume.id =" . esc_sql($id);
        $result = wpjobportal::$_db->get_var($query);
        if ($result == null) {
            return false;
        } else {
            return true;
        }
    }

    ///***To Add Only one Resume***///
    function checkAlreadyadd($uid='',$resumeid=''){
        if(wpjobportal::$_common->wpjp_isadmin()){
            return true;
        }else{
            if(!is_numeric($uid))
            return false;
        if(in_array('visitorapplyjob', wpjobportal::$_active_addons) || in_array('multiresume', wpjobportal::$_active_addons)){
            return true;
        }
        $query = "SELECT count(resume.id) as resume
        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
        WHERE resume.status = 1 AND resume.uid =" . esc_sql($uid) ." AND resume.status!=-1 AND resume.id!='".esc_sql($resumeid)."'";
        $result = wpjobportal::$_db->get_var($query);
        $count = (int)$result;
        if($count > 0){
            return false;
         }else{
            return true;
            }
        }
    }

    public function checkAlreadyViewResumeContactDetail($resumeid,$data='') {
        if (!is_numeric($resumeid))
            return false;
        if (WPJOBPORTALincluder::getObjectClass('user')->isguest() || !WPJOBPORTALincluder::getObjectClass('user')->isWPJOBPORTALUser()) {
            return false;
        }
        if(WPJOBPORTALincluder::getObjectClass('user')->isemployer()){
            $employerid = WPJOBPORTALincluder::getObjectClass('user')->uid();
            $query = "SELECT count(job.id)
                        FROM `".wpjobportal::$_db->prefix."wj_portal_jobs` AS job
                        JOIN `".wpjobportal::$_db->prefix."wj_portal_jobapply` AS ja ON ja.jobid = job.id
                        WHERE job.uid = ".esc_sql($employerid)." AND ja.cvid = ".esc_sql($resumeid);
            $result = wpjobportal::$_db->get_var($query);
            if($result > 0){
                return true;
            }
        }

        if(current_user_can('manage_options') && !isset($data['uid']) ){
            return true;
        }
        if (isset($_SESSION['wp-wpjobportal']) && isset($_SESSION['wp-wpjobportal']['resumeid'])) {
            if($_SESSION['wp-wpjobportal']['resumeid'] == $resumeid)
                return true;
        }
        if(isset($data['uid'])!=''){
            $uid = $data['uid'];
        }else{
            $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        }
        if(!is_numeric($uid)){
            return false;
        }
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_employer_view_resume` WHERE resumeid = ".esc_sql($resumeid)." AND uid =". esc_sql($uid);
        $result = wpjobportal::$_db->get_var($query);
        if ($result > 0)
            return true;
        else
            return false;
    }

    function getIfResumeOwner($resumeid) {
        if (!is_numeric($resumeid))
            return false;
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        //extra code
        // if(in_array('multiresume', wpjobportal::$_active_addons)){
        //     $resumeid = $jobid;
        // }else{
        //     $query = "SELECT resume.id
        //             FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
        //             WHERE resume.uid = " . esc_sql($uid)." ORDER by resume.id DESC LIMIT 0,1";
        //     $result = wpjobportal::$_db->get_var($query);
        //     $resumeid = $jobid;
        // }
        // to handle visitor quick apply case
        if(!is_numeric($uid)){
            $uid = 0;
        }
        $query = "SELECT resume.id
        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
        WHERE resume.uid = ". esc_sql($uid)."
        AND resume.id =" . esc_sql($resumeid);
        $result = wpjobportal::$_db->get_var($query);
        if ($result == null) {
            return false;
        } else {
            return true;
        }
    }

    function getPackagePopupForResumeContactDetail(){

            $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
            if (! wp_verify_nonce( $nonce, 'get-package-popup-for-resume-contact-detail') ) {
                die( 'Security check Failed' );
            }
            $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
            $resumeid = WPJOBPORTALrequest::getVar('wpjobportalid');
            $subtype = wpjobportal::$_config->getConfigValue('submission_type');
            #submit type popup for Featured Resume --Listing(Membership)
            if( $subtype != 3 ){
                return false;
            }
            $userpackages = array();
            $pack = apply_filters('wpjobportal_addons_credit_get_Packages_user',false,$uid,'resumecontactdetail');
            $addonclass = '';
            if(WPJOBPORTALincluder::getJSModel('common')->isElegantDesignEnabled()){
                $addonclass = ' wjportal-elegant-addon-packages-popup ';
            }
            foreach($pack as $package){
                if($package->resumecontactdetail == -1 || $package->remresumecontactdetail > 0){ //-1 = unlimited
                    $userpackages[] = $package;
                }
            }
            if (wpjobportal::$theme_chk == 1) {
                $content = '
                <div id="wjportal-popup-background" style="display: none;"></div>
                <div id="package-popup" class="wjportal-popup-wrp wjportal-packages-popup">
                    <div class="wjportal-popup-cnt">
                        <img id="wjportal-popup-close-btn" alt="popup cross" src="'.esc_url(WPJOBPORTAL_PLUGIN_URL).'includes/images/popup-close.png">
                        <div class="wjportal-popup-title">
                            '.esc_html(__("Select Package",'wp-job-portal')).'
                            <div class="wjportal-popup-title3">
                                '.esc_html(__("Please select a package first",'wp-job-portal')).'
                            </div>
                        </div>
                        <div class="wjportal-popup-contentarea">
                            <div class="wjportal-packages-wrp">';
                                if(count($userpackages) == 0 || empty($userpackages)){
                                    $content .= WPJOBPORTALmessages::showMessage(esc_html(__("You do not have any View Resume Contact remaining",'wp-job-portal')),'error',1);
                                } else {
                                    foreach($userpackages as $package){
                                        #User Package For Selection in Popup Model --Views
                                        $content .= '
                                            <div class="wjportal-pkg-item" id="package-div-'.esc_attr($package->id).'" onclick="selectPackage('.esc_attr($package->id).');">
                                                <div class="wjportal-pkg-item-top">
                                                    <div class="wjportal-pkg-item-title">
                                                        '.esc_html($package->title).'
                                                    </div>
                                                </div>
                                                <div class="wjportal-pkg-item-btm">
                                                    <div class="wjportal-pkg-item-row">
                                                        <span class="wjportal-pkg-item-tit">
                                                            '.esc_html(__("View Contact Resume",'wp-job-portal')).' :
                                                        </span>
                                                        <span class="wjportal-pkg-item-val">
                                                            '.($package->resumecontactdetail==-1 ? esc_html(__("Unlimited",'wp-job-portal')) : esc_attr($package->resumecontactdetail)).'
                                                        </span>
                                                    </div>
                                                    <div class="wjportal-pkg-item-row">
                                                        <span class="wjportal-pkg-item-tit">
                                                            '.esc_html(__("Remaining",'wp-job-portal')).' :
                                                        </span>
                                                        <span class="wjportal-pkg-item-val">
                                                            '.($package->resumecontactdetail==-1 ? esc_html(__("Unlimited",'wp-job-portal')) : esc_attr($package->remresumecontactdetail)).'
                                                        </span>
                                                    </div>
                                                    <div class="wjportal-pkg-item-btn-row">
                                                    <a href="#" class="wjportal-pkg-item-btn">
                                                        '.esc_html(__("Select Package",'wp-job-portal')).'
                                                    </a>
                                                </div>
                                            </div>
                                        </div>
                                    ';
                                }
                                /*$content .= '<div class="wjportal-pkg-help-txt">
                                                '.esc_html(__("Click on package to select one",'wp-job-portal')).'
                                            </div>';*/
                            }
                            $content .= '</div>
                            <div class="wjportal-popup-msgs" id="wjportal-package-message"> </div>
                        </div>
                        <div class="wjportal-visitor-msg-btn-wrp">
                            <form action="'.esc_url(wp_nonce_url(wpjobportal::wpjobportal_makeUrl(array('wpjobportalme'=>'resume','action'=>'wpjobportaltask','task'=>'addviewresumedetail','wpjobportalid'=>$resumeid,'wpjobportalpageid'=>wpjobportal::wpjobportal_getPageid())),'wpjobportal_resume_nonce')).'" method="post">
                                <input type="hidden" id="wpjobportal_packageid" name="wpjobportal_packageid">
                                <input type="submit" rel="button" id="jsre_featured_button" class="wjportal-visitor-msg-btn" value="'.esc_html(__('Show Company Contact','wp-job-portal')).'" disabled/>
                            </form>
                        </div>
                    </div>
                </div>';
            } else {
           $content = '
            <div id="wjportal-popup-background" style="display: none;"></div>
            <div id="package-popup" class="wjportal-popup-wrp wjportal-packages-popup '.$addonclass.'">
                <div class="wjportal-popup-cnt">
                    <img id="wjportal-popup-close-btn" alt="popup cross" src="'.esc_url(WPJOBPORTAL_PLUGIN_URL).'includes/images/popup-close.png">
                    <div class="wjportal-popup-title">
                        '.esc_html(__("Select Package",'wp-job-portal')).'
                        <div class="wjportal-popup-title3">
                            '.esc_html(__("Please select a package first",'wp-job-portal')).'
                        </div>
                    </div>
                    <div class="wjportal-popup-contentarea">
                        <div class="wjportal-packages-wrp">';
                            if(count($userpackages) == 0 || empty($userpackages)){
                                $content .= WPJOBPORTALmessages::showMessage(esc_html(__("You do not have any View Resume Contact remaining",'wp-job-portal')),'error',1);
                            } else {
                                foreach($userpackages as $package){
                                    #User Package For Selection in Popup Model --Views
                                    $content .= '
                                        <div class="wjportal-pkg-item" id="package-div-'.esc_attr($package->id).'" onclick="selectPackage('.esc_attr($package->id).');">
                                            <div class="wjportal-pkg-item-top">
                                                <div class="wjportal-pkg-item-title">
                                                    '.esc_html($package->title).'
                                                </div>
                                            </div>
                                            <div class="wjportal-pkg-item-btm">
                                                <div class="wjportal-pkg-item-row">
                                                    <span class="wjportal-pkg-item-tit">
                                                        '.esc_html(__("View Contact Resume",'wp-job-portal')).' :
                                                    </span>
                                                    <span class="wjportal-pkg-item-val">
                                                        '.($package->resumecontactdetail==-1 ? esc_html(__("Unlimited",'wp-job-portal')) : esc_attr($package->resumecontactdetail)).'
                                                    </span>
                                                </div>
                                                <div class="wjportal-pkg-item-row">
                                                    <span class="wjportal-pkg-item-tit">
                                                        '.esc_html(__("Remaining",'wp-job-portal')).' :
                                                    </span>
                                                    <span class="wjportal-pkg-item-val">
                                                        '.($package->resumecontactdetail==-1 ? esc_html(__("Unlimited",'wp-job-portal')) : esc_attr($package->remresumecontactdetail)).'
                                                    </span>
                                                </div>
                                                <div class="wjportal-pkg-item-btn-row">
                                                    <a href="#" class="wjportal-pkg-item-btn">
                                                        '.esc_html(__("Select Package",'wp-job-portal')).'
                                                    </a>
                                                </div>
                                            </div>
                                        </div>
                                    ';
                                }
                                /*$content .= '<div class="wjportal-pkg-help-txt">
                                                '.esc_html(__("Click on package to select one",'wp-job-portal')).'
                                            </div>';*/
                            }
                        $content .= '</div>
                        <div class="wjportal-popup-msgs" id="wjportal-package-message">&nbsp;</div>
                    </div>
                    <div class="wjportal-visitor-msg-btn-wrp">
                        <form action="'.esc_url(wp_nonce_url(wpjobportal::wpjobportal_makeUrl(array('wpjobportalme'=>'resume','action'=>'wpjobportaltask','task'=>'addviewresumedetail','wpjobportalid'=>$resumeid,'wpjobportalpageid'=>wpjobportal::wpjobportal_getPageid())),'wpjobportal_resume_nonce')).'" method="post">
                            <input type="hidden" id="wpjobportal_packageid" name="wpjobportal_packageid">
                            <input type="submit" rel="button" id="jsre_featured_button" class="wjportal-visitor-msg-btn" value="'.esc_html(__('Show Resume Contact','wp-job-portal')).'" disabled/>
                        </form>
                    </div>
                </div>
            </div>';
            }

            echo wp_kses($content, WPJOBPORTAL_ALLOWED_TAGS);
            exit();
    }

    function UserCanAddResume($uid){
        if(WPJOBPORTALincluder::getObjectClass('user')->isguest()){
            return true;
        }
        # Check Whether Not More than one
        if(!is_numeric($uid)){
            return false;
        }
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE uid =". esc_sql($uid);
        $resume = wpjobportaldb::get_var($query);
        if($resume > 0){
            return false;
        }
        return true;
    }

    function getMyResumeSearchFormData($layout){
        $jsjp_search_array = array();
        if($layout == 'myresume'){
            $jsjp_search_array['sorton'] = WPJOBPORTALrequest::getVar('sorton', 'post', 6);
            $jsjp_search_array['sortby'] = WPJOBPORTALrequest::getVar('sortby', 'post', 2);
        }elseif($layout == 'resumes'){
            $customfields = wpjobportal::$_wpjpcustomfield->userFieldsData(3);
            $jsjp_search_array['sorton'] = WPJOBPORTALrequest::getVar('sorton', 'post', 6);
            $jsjp_search_array['sortby'] = WPJOBPORTALrequest::getVar('sortby', 'post', 2);
            $jsjp_search_array['application_title'] = WPJOBPORTALrequest::getVar('application_title');
            $jsjp_search_array['first_name'] = WPJOBPORTALrequest::getVar('first_name');
            $jsjp_search_array['middle_name'] = WPJOBPORTALrequest::getVar('middle_name');
            $jsjp_search_array['last_name'] = WPJOBPORTALrequest::getVar('last_name');
            $jsjp_search_array['nationality'] = WPJOBPORTALrequest::getVar('nationality');
            $jsjp_search_array['gender'] = WPJOBPORTALrequest::getVar('gender');
            $jsjp_search_array['salaryfixed'] = WPJOBPORTALrequest::getVar('salaryfixed');
            $jsjp_search_array['jobtype'] = WPJOBPORTALrequest::getVar('jobtype');
            $jsjp_search_array['salaryrangetype'] = WPJOBPORTALrequest::getVar('salaryrangetype');
            $jsjp_search_array['zipcode'] = WPJOBPORTALrequest::getVar('zipcode');
            $jsjp_search_array['keywords'] = WPJOBPORTALrequest::getVar('keywords');
            $jsjp_search_array['city'] = WPJOBPORTALrequest::getVar('city');
            $jsjp_search_array['airesumesearcch'] = WPJOBPORTALrequest::getVar('airesumesearcch');
            // if(WPJOBPORTALrequest::getVar('resume_filter')){
                $resume_filter = wpjobportalphplib::wpJP_safe_decoding(WPJOBPORTALrequest::getVar('resume_filter'));
                if($resume_filter !=''){
                    $resume_filter = json_decode($resume_filter, true );
                }
                if(isset($resume_filter['category'])){
                    $jsjp_search_array['category'] = $resume_filter['category'];
                }else{
                    $jsjp_search_array['category'] = WPJOBPORTALrequest::getVar('category');
                }
            // }
            if (!empty($customfields)) {
                foreach ($customfields as $uf) {
                    $jsjp_search_array['resume_custom_fields'][$uf->field] = WPJOBPORTALrequest::getVar($uf->field, 'post');
                }
            }
        }
        $jsjp_search_array['search_from_resumes'] = 1;
        return $jsjp_search_array;
    }

    function getAdminResumeSearchFormData(){
        $jsjp_search_array = array();
        $jsjp_search_array['searchtitle'] = WPJOBPORTALrequest::getVar('searchtitle');
        $jsjp_search_array['searchname'] = WPJOBPORTALrequest::getVar('searchname');
        $jsjp_search_array['searchjobcategory'] = WPJOBPORTALrequest::getVar('searchjobcategory');
        $jsjp_search_array['searchjobtype'] = WPJOBPORTALrequest::getVar('searchjobtype');
        $jsjp_search_array['searchjobsalaryrange'] = WPJOBPORTALrequest::getVar('searchjobsalaryrange');
        $jsjp_search_array['status'] = WPJOBPORTALrequest::getVar('status');
        $jsjp_search_array['datestart'] = WPJOBPORTALrequest::getVar('datestart');
        $jsjp_search_array['dateend'] = WPJOBPORTALrequest::getVar('dateend');
        $jsjp_search_array['featured'] = WPJOBPORTALrequest::getVar('featured');
        $jsjp_search_array['sorton'] = WPJOBPORTALrequest::getVar('sorton', 'post', 6);
        $jsjp_search_array['sortby'] = WPJOBPORTALrequest::getVar('sortby', 'post', 2);
        $jsjp_search_array['search_from_resumes'] = 1;
        return $jsjp_search_array;
    }

    function getResumeSavedCookiesData($layout){
        $jsjp_search_array = array();
        $wpjp_search_cookie_data = '';
        if(isset($_COOKIE['jsjp_jobportal_search_data'])){
            $wpjp_search_cookie_data = wpjobportal::wpjobportal_sanitizeData($_COOKIE['jsjp_jobportal_search_data']);
            $wpjp_search_cookie_data = wpjobportalphplib::wpJP_safe_decoding($wpjp_search_cookie_data);
            $wpjp_search_cookie_data = json_decode( $wpjp_search_cookie_data , true );
        }
        if($wpjp_search_cookie_data != '' && isset($wpjp_search_cookie_data['search_from_resumes']) && $wpjp_search_cookie_data['search_from_resumes'] == 1){
            if(wpjobportal::$_common->wpjp_isadmin()){
                $jsjp_search_array['searchtitle'] = $wpjp_search_cookie_data['searchtitle'];
                $jsjp_search_array['searchname'] = $wpjp_search_cookie_data['searchname'];
                $jsjp_search_array['searchjobcategory'] = $wpjp_search_cookie_data['searchjobcategory'];
                $jsjp_search_array['searchjobtype'] = $wpjp_search_cookie_data['searchjobtype'];
                $jsjp_search_array['searchjobsalaryrange'] = $wpjp_search_cookie_data['searchjobsalaryrange'];
                $jsjp_search_array['status'] = $wpjp_search_cookie_data['status'];
                $jsjp_search_array['datestart'] = $wpjp_search_cookie_data['datestart'];
                $jsjp_search_array['dateend'] = $wpjp_search_cookie_data['dateend'];
                $jsjp_search_array['featured'] = $wpjp_search_cookie_data['featured'];
                $jsjp_search_array['sorton'] = $wpjp_search_cookie_data['sorton'];
                $jsjp_search_array['sortby'] = $wpjp_search_cookie_data['sortby'];
            }else{
                if($layout == 'myresume'){
                    $jsjp_search_array['sorton'] = $wpjp_search_cookie_data['sorton'];
                    $jsjp_search_array['sortby'] = $wpjp_search_cookie_data['sortby'];
                }elseif($layout == 'resumes'){
                    $customfields = wpjobportal::$_wpjpcustomfield->userFieldsData(3);
                    $jsjp_search_array['sorton'] = $wpjp_search_cookie_data['sorton'];
                    $jsjp_search_array['sortby'] = $wpjp_search_cookie_data['sortby'];
                    $jsjp_search_array['application_title'] = $wpjp_search_cookie_data['application_title'];
                    $jsjp_search_array['first_name'] = $wpjp_search_cookie_data['first_name'];
                    $jsjp_search_array['middle_name'] = $wpjp_search_cookie_data['middle_name'];
                    $jsjp_search_array['last_name'] = $wpjp_search_cookie_data['last_name'];
                    $jsjp_search_array['nationality'] = $wpjp_search_cookie_data['nationality'];
                    $jsjp_search_array['gender'] = $wpjp_search_cookie_data['gender'];
                    $jsjp_search_array['salaryfixed'] = $wpjp_search_cookie_data['salaryfixed'];
                    $jsjp_search_array['jobtype'] = $wpjp_search_cookie_data['jobtype'];
                    $jsjp_search_array['salaryrangetype'] = $wpjp_search_cookie_data['salaryrangetype'];
                    $jsjp_search_array['category'] = $wpjp_search_cookie_data['category'];
                    $jsjp_search_array['zipcode'] = $wpjp_search_cookie_data['zipcode'];
                    $jsjp_search_array['keywords'] = $wpjp_search_cookie_data['keywords'];
                    $jsjp_search_array['city'] = $wpjp_search_cookie_data['city'];
                    $jsjp_search_array['airesumesearcch'] = $wpjp_search_cookie_data['airesumesearcch'];
                    if (!empty($customfields)) {
                        foreach ($customfields as $uf) {
                            $jsjp_search_array['resume_custom_fields'][$uf->field] = $wpjp_search_cookie_data['resume_custom_fields'][$uf->field];
                        }
                    }
                }
            }
        }
        return $jsjp_search_array;
    }

    function setSearchVariableForMyResume($jsjp_search_array,$layout){
        wpjobportal::$_search['myresume']['sorton'] = isset($jsjp_search_array['sorton']) ? $jsjp_search_array['sorton'] : null;
        wpjobportal::$_search['myresume']['sortby'] = isset($jsjp_search_array['sortby']) ? $jsjp_search_array['sortby'] : null;
        if($layout == 'resumes'){
            $customfields = wpjobportal::$_wpjpcustomfield->userFieldsData(3);
            wpjobportal::$_search['resumes']['sorton'] = isset($jsjp_search_array['sorton']) ? $jsjp_search_array['sorton'] : 6;
            wpjobportal::$_search['resumes']['sortby'] = isset($jsjp_search_array['sortby']) ? $jsjp_search_array['sortby'] : 2;
            wpjobportal::$_search['resumes']['application_title'] = isset($jsjp_search_array['application_title']) ? $jsjp_search_array['application_title'] : null;
            wpjobportal::$_search['resumes']['first_name'] = isset($jsjp_search_array['first_name']) ? $jsjp_search_array['first_name'] : null;
            wpjobportal::$_search['resumes']['middle_name'] = isset($jsjp_search_array['middle_name']) ? $jsjp_search_array['middle_name'] : null;
            wpjobportal::$_search['resumes']['last_name'] = isset($jsjp_search_array['last_name']) ? $jsjp_search_array['last_name'] : null;
            wpjobportal::$_search['resumes']['nationality'] = isset($jsjp_search_array['nationality']) ? $jsjp_search_array['nationality'] : null;
            wpjobportal::$_search['resumes']['gender'] = isset($jsjp_search_array['gender']) ? $jsjp_search_array['gender'] : null;
            wpjobportal::$_search['resumes']['salaryfixed'] = isset($jsjp_search_array['salaryfixed']) ? $jsjp_search_array['salaryfixed'] : null;
            wpjobportal::$_search['resumes']['jobtype'] = isset($jsjp_search_array['jobtype']) ? $jsjp_search_array['jobtype'] : null;
            wpjobportal::$_search['resumes']['salaryrangetype'] = isset($jsjp_search_array['salaryrangetype']) ? $jsjp_search_array['salaryrangetype'] : null;
            wpjobportal::$_search['resumes']['category'] = isset($jsjp_search_array['category']) ? $jsjp_search_array['category'] : null;
            wpjobportal::$_search['resumes']['zipcode'] = isset($jsjp_search_array['zipcode']) ? $jsjp_search_array['zipcode'] : null;
            wpjobportal::$_search['resumes']['keywords'] = isset($jsjp_search_array['keywords']) ? $jsjp_search_array['keywords'] : null;
            wpjobportal::$_search['resumes']['city'] = isset($jsjp_search_array['city']) ? $jsjp_search_array['city'] : null;
            wpjobportal::$_search['resumes']['airesumesearcch'] = isset($jsjp_search_array['airesumesearcch']) ? $jsjp_search_array['airesumesearcch'] : null;
            if (!empty($customfields)) {
                foreach ($customfields as $uf) {
                    wpjobportal::$_search['resume_custom_fields'][$uf->field] = isset($jsjp_search_array['resume_custom_fields'][$uf->field]) ? $jsjp_search_array['resume_custom_fields'][$uf->field] : '';
                }
            }
        }
    }

    function setSearchVariableForAdminResume($jsjp_search_array){
        wpjobportal::$_search['resumes']['searchtitle']  = isset($jsjp_search_array['searchtitle']) ? $jsjp_search_array['searchtitle'] : null;
        wpjobportal::$_search['resumes']['searchname'] = isset($jsjp_search_array['searchname']) ? $jsjp_search_array['searchname'] : null;
        wpjobportal::$_search['resumes']['searchjobcategory'] = isset($jsjp_search_array['searchjobcategory']) ? $jsjp_search_array['searchjobcategory'] : null;
        wpjobportal::$_search['resumes']['searchjobtype'] = isset($jsjp_search_array['searchjobtype']) ? $jsjp_search_array['searchjobtype'] : null;
        wpjobportal::$_search['resumes']['searchjobsalaryrange'] = isset($jsjp_search_array['searchjobsalaryrange']) ? $jsjp_search_array['searchjobsalaryrange'] : null;
        wpjobportal::$_search['resumes']['status'] = isset($jsjp_search_array['status']) ? $jsjp_search_array['status'] : null;
        wpjobportal::$_search['resumes']['datestart'] = isset($jsjp_search_array['datestart']) ? $jsjp_search_array['datestart'] : null;
        wpjobportal::$_search['resumes']['dateend'] = isset($jsjp_search_array['dateend']) ? $jsjp_search_array['dateend'] : null;
        wpjobportal::$_search['resumes']['featured'] = isset($jsjp_search_array['featured']) ? $jsjp_search_array['featured'] : null;
        wpjobportal::$_search['resumes']['sorton'] = isset($jsjp_search_array['sorton']) ? $jsjp_search_array['sorton'] : 6;
        wpjobportal::$_search['resumes']['sortby'] = isset($jsjp_search_array['sortby']) ? $jsjp_search_array['sortby'] : 2;
    }

    function deleteResumeLogo($resumeid = 0){
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'delete-resume-logo') ) {
            die( 'Security check Failed' );
        }
        if($resumeid == 0){
            $resumeid = WPJOBPORTALrequest::getVar('resumeid');
        }
        if(!is_numeric($resumeid)){
            return false;
        }
        $row = WPJOBPORTALincluder::getJSTable('resume');
        $data_directory = wpjobportal::$_config->getConfigValue('data_directory');
        $wpdir = wp_upload_dir();
        $path = $wpdir['basedir'] . '/' . $data_directory . '/data/jobseeker/resume_' . $resumeid . '/photo';
        $files = glob($path . '/*.*');
        array_map('wp_delete_file', $files);    // delete all file in the direcoty
        $query = "UPDATE `".wpjobportal::$_db->prefix."wj_portal_resume` SET photo = '' WHERE id = ".esc_sql($resumeid);
        wpjobportal::$_db->query($query);
        return true;
    }

    function deleteResumeLogoModel($resumeid = 0){

        if($resumeid == 0){
            $resumeid = WPJOBPORTALrequest::getVar('resumeid');
        }
        if(!is_numeric($resumeid)){
            return false;
        }
        $row = WPJOBPORTALincluder::getJSTable('resume');
        $data_directory = wpjobportal::$_config->getConfigValue('data_directory');
        $wpdir = wp_upload_dir();
        $path = $wpdir['basedir'] . '/' . $data_directory . '/data/jobseeker/resume_' . $resumeid . '/photo';
        $files = glob($path . '/*.*');
        array_map('wp_delete_file', $files);    // delete all file in the direcoty
        $query = "UPDATE `".wpjobportal::$_db->prefix."wj_portal_resume` SET photo = '' WHERE id = ".esc_sql($resumeid);
        wpjobportal::$_db->query($query);
        return true;
    }

    function getMessagekey(){
        $key = 'resume';if(wpjobportal::$_common->wpjp_isadmin()){$key = 'admin_'.$key;}return $key;
    }

    function getResumesForPageBuilderWidget($no_of_resumes){

        $query = "SELECT resume.id,CONCAT(resume.alias,'-',resume.id) AS resumealiasid ,resume.first_name
            ,resume.last_name,resume.application_title as applicationtitle,resume.email_address,category.cat_title
            ,resume.created,jobtype.title AS jobtypetitle,resume.photo,
            resume.isfeaturedresume,resume.endfeatureddate
            ,resume.status,city.name AS cityname
            ,state.name AS statename,resume.params,resume.salaryfixed as salary
            ,resume.last_modified,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor,country.name AS countryname,resume.id as resumeid
            FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category ";
        $query .= " JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` AS address1 ON address1.resumeid = resume.id ";
        $query .= "
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = (SELECT address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = resume.id LIMIT 1)
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid
            WHERE resume.status = 1  ";
        $query.= " ORDER BY created DESC ";
        //$query.=" LIMIT 4 " ;
        if(is_numeric($no_of_resumes)){
            $query.=" LIMIT " . esc_sql($no_of_resumes);
        }

        $results = wpjobportaldb::get_results($query);

        $data = array();
        foreach ($results AS $d) {
            //  updated the query select to select 'name' as cityname
            $d->location = WPJOBPORTALincluder::getJSModel('common')->getLocationForView($d->cityname, $d->statename, $d->countryname);
            $data[] = $d;
        }
        return $data;
    }

    ///***Check if Quick Apply resume***///
    function checkQuickApply($resumeid){
        if(!is_numeric($resumeid))
            return false;

        $query = "SELECT count(resume.id) as resume_count
        FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
        WHERE resume.quick_apply = 1 AND resume.id = ".esc_sql($resumeid);
        $result = wpjobportal::$_db->get_var($query);
        $count = (int)$result;
        if($count > 0){
            return true;
         }else{
            return false;
        }
    }

    function processShortcodeAttributesResume(){
        $inquery = '';

        // cities
        $cities_list = WPJOBPORTALrequest::getVar('locations', 'shortcode_option', false);
        if ($cities_list && $cities_list !='' ) { // not empty check
            $city_array = wpjobportalphplib::wpJP_explode( ',' , $cities_list); // handle multi case
            $cityQuery = false;
            foreach($city_array as $city_id){ // loop over all ids
                if($city_id != ''){ // null check
                    $city_id = trim($city_id);
                }
                if(!is_numeric($city_id)){ // numric check
                    continue;
                }
                if($cityQuery){
                    $cityQuery .= " OR address1.address_city =  ".esc_sql($city_id);
                }else{
                    $cityQuery = " address1.address_city =  ".esc_sql($city_id);
                }
            }
            if($cityQuery){
                $inquery .= " AND ( $cityQuery ) ";
            }
        }

        // tags
        $tags_list = WPJOBPORTALrequest::getVar('tags', 'shortcode_option', false);
        if ($tags_list && $tags_list !='' ) { // not empty check
            $tag_array = wpjobportalphplib::wpJP_explode( ',' , $tags_list); // handle multi case
            $tagQuery = false;
            foreach($tag_array as $tag_id){ // loop over all ids
                if($tag_id != ''){ // null check
                    $tag_id = trim($tag_id);
                }
                if(!is_numeric($tag_id)){ // numric check
                    continue;
                }
                if($tagQuery){
                    $tagQuery .= " OR FIND_IN_SET('" . esc_sql($tag_id) . "', resume.tags) > 0 ";
                }else{
                    $tagQuery = " FIND_IN_SET('" . esc_sql($tag_id) . "', resume.tags) > 0 ";
                }
            }
            if($tagQuery){
                $inquery .= " AND ( $tagQuery ) ";
            }
        }

        // categories
        $category_list = WPJOBPORTALrequest::getVar('categories', 'shortcode_option', false);
        if ($category_list && $category_list !='' ) { // not empty check
            $category_array = wpjobportalphplib::wpJP_explode( ',' , $category_list); // handle multi case
            $categoryQuery = false;
            $wpjp_ids = array();
            foreach($category_array as $category_id){  // loop over all ids
                if($category_id != ''){ // null check
                    $category_id = trim($category_id);
                }
                if(!is_numeric($category_id)){ // numric check
                    continue;
                }
                // handle case of child categories of current category
                $wpjp_query = "SELECT id FROM `" . wpjobportal::$_db->prefix . "wj_portal_categories` WHERE parentid = ". esc_sql($category_id);
                $wpjp_cats = wpjobportaldb::get_results($wpjp_query);

                foreach ($wpjp_cats as $wpjp_cat) {
                    $wpjp_ids[] = $wpjp_cat->id;
                }
                $wpjp_ids[] = $category_id;

            }
            $wpjp_ids = implode(",",$wpjp_ids);
            $inquery .= " AND resume.job_category IN(".$wpjp_ids.")";
        }


        // types
        $jobtype_list = WPJOBPORTALrequest::getVar('types', 'shortcode_option', false);
        if ($jobtype_list && $jobtype_list !='' ) { // not empty check
            $jobtype_array = wpjobportalphplib::wpJP_explode( ',' , $jobtype_list); // handle multi case
            $jobtypeQuery = false;
            foreach($jobtype_array as $jobtype_id){  // loop over all ids
                if($jobtype_id != ''){ // null check
                    $jobtype_id = trim($jobtype_id);
                }
                if(!is_numeric($jobtype_id)){ // numric check
                    continue;
                }
                if($jobtypeQuery){
                    $jobtypeQuery .= " OR resume.jobtype  = " . esc_sql($jobtype_id);
                }else{
                    $jobtypeQuery = " resume.jobtype  =  " . esc_sql($jobtype_id);
                }
            }
            if($jobtypeQuery){
                $inquery .= " AND ( $jobtypeQuery ) ";
            }
        }

        // resume ids
        $resume_list = WPJOBPORTALrequest::getVar('ids', 'shortcode_option', false);
        if ($resume_list && $resume_list !='' ) { // not empty check
            $resume_array = wpjobportalphplib::wpJP_explode( ',' , $resume_list); // handle multi case
            $resumeQuery = false;
            foreach($resume_array as $resume_id){  // loop over all ids
                if($resume_id != ''){ // null check
                    $resume_id = trim($resume_id);
                }
                if(!is_numeric($resume_id)){ // numric check
                    continue;
                }
                if($resumeQuery){
                    $resumeQuery .= " OR resume.id  = " . esc_sql($resume_id);
                }else{
                    $resumeQuery = " resume.id  =  " . esc_sql($resume_id);
                }
            }
            if($resumeQuery){
                $inquery .= " AND ( $resumeQuery ) ";
            }
        }


        //handle attirbute for ordering
        $sorting = WPJOBPORTALrequest::getVar('sorting', 'shortcode_option', false);
        if($sorting && $sorting != ''){
            $this->makeOrderingQueryFromShortcodeAttributesResume($sorting);
        }

        //handle attirbute for no of jobs
        $no_of_resumes = WPJOBPORTALrequest::getVar('no_of_resumes', 'shortcode_option', false);
        if($no_of_resumes && $no_of_resumes != ''){
            wpjobportal::$_data['shortcode_option_no_of_resumes'] = (int) $no_of_resumes;
        }


        // handle visibilty of data based on shortcode
        $this->handleDataVisibilityByShortcodeAttributesResume();
        return $inquery;
    }


    function makeOrderingQueryFromShortcodeAttributesResume($sorting) {
        switch ($sorting) {
            //name
            case "name_desc":
                wpjobportal::$_data['sorting'] = " resume.first_name DESC ";
                break;
            case "name_asc":
                wpjobportal::$_data['sorting'] = " resume.first_name ASC ";
                break;
            //posted
            case "posted_desc":
                wpjobportal::$_data['sorting'] = " resume.created DESC ";
                break;
            case "posted_asc":
                wpjobportal::$_data['sorting'] = " resume.created ASC ";
                break;
            // category
            case 'category_asc':
                wpjobportal::$_data['sorting'] = ' category.cat_title ASC ';
                break;
            case 'category_desc':
                wpjobportal::$_data['sorting'] = ' category.cat_title DESC ';
                break;
            // jobtype
            case 'jobtype_asc':
                wpjobportal::$_data['sorting'] = ' jobtype.title ASC ';
                break;
            case 'jobtype_desc':
                wpjobportal::$_data['sorting'] = ' jobtype.title DESC ';
                break;
        }
        return;
    }

    function handleDataVisibilityByShortcodeAttributesResume() {

        //handle attirbute for hide company logo on job listing
        $hide_resume_photo = WPJOBPORTALrequest::getVar('hide_resume_photo', 'shortcode_option', false);
        if($hide_resume_photo && $hide_resume_photo != ''){
            wpjobportal::$_data['shortcode_option_hide_resume_photo'] = 1;
        }

        //handle attirbute for hide company name on job listing
        $hide_resume_location = WPJOBPORTALrequest::getVar('hide_resume_location', 'shortcode_option', false);
        if($hide_resume_location && $hide_resume_location != ''){
            wpjobportal::$_data['shortcode_option_hide_resume_location'] = 1;
        }

        //handle attirbute for hide company name on job listing
        $hide_resume_salary = WPJOBPORTALrequest::getVar('hide_resume_salary', 'shortcode_option', false);
        if($hide_resume_salary && $hide_resume_salary != ''){
            wpjobportal::$_data['shortcode_option_hide_resume_salary'] = 1;
        }
    }

    function getResumesForJobapply(){
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        $resume_list = array();
        if( is_numeric($uid) && $uid > 0 ){
            $query = "SELECT id,application_title,first_name,last_name FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE status = 1 AND quick_apply <> 1 AND uid = ". esc_sql($uid);
            // code to handle unpublished application_title
            $resume_data = wpjobportal::$_db->get_results($query);
            $resume_list = array();
            foreach ($resume_data as $single_resume) {
                $resume_record = new stdClass();
                $resume_record->id = $single_resume->id;
                if($single_resume->application_title != ''){
                    $resume_record->text = $single_resume->application_title;
                }else{
                    $resume_record->text = $single_resume->first_name.' '.$single_resume->last_name;
                }
                $resume_list[] = $resume_record;
            }
        }
        return $resume_list;
    }

    function getResumesByResumeIds($resume_id_list){
        if($resume_id_list == ''){
            return false;
        }
       //Data
        $query = "SELECT resume.id,CONCAT(resume.alias,'-',resume.id) AS resumealiasid ,resume.first_name
                ,resume.last_name,resume.application_title as applicationtitle,resume.email_address,category.cat_title
                ,resume.created,jobtype.title AS jobtypetitle,resume.photo,
                resume.isfeaturedresume,resume.endfeatureddate
                ,resume.status,city.name AS cityname
                ,state.name AS statename,resume.params,resume.salaryfixed as salary
                ,resume.last_modified,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor,country.name AS countryname,resume.id as resumeid,resume.skills
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS category ON category.id = resume.job_category ";
            $query .= "
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = resume.jobtype
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = (SELECT address_city FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` WHERE resumeid = resume.id LIMIT 1)
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.id = city.stateid
                LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid ";
                $query .= " WHERE resume.status = 1 AND resume.quick_apply <> 1";
                $query .= " AND resume.id IN (".esc_sql($resume_id_list).")";
        $query .= " GROUP BY resume.id ";

        $results = wpjobportal::$_db->get_results($query);
        $data = array();
        foreach ($results AS $d) {
            //  updated the query select to select 'name' as cityname
            $d->location = WPJOBPORTALincluder::getJSModel('common')->getLocationForView($d->cityname, $d->statename, $d->countryname);
            $data[] = $d;
        }
        return $data;
    }


    function updateRecordsForAISearchResume(){

        $query = "SELECT resume.*
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume ";
                // not sure about this
                $query .= " WHERE resume.quick_apply <> 1";
                $query .= " ORDER BY resume.id ASC ";

        $results = wpjobportal::$_db->get_results($query);

        foreach ($results AS $resume) {
            $resume_data = json_decode(json_encode($resume),true); // main record is in personal section (mostly)
            $this->importAIStringDataForResume($resume_data);
        }
        return;
    }


    function prepareAIStringDataForResume($data){
        if(empty($data)){
            return;
        }
        if(!is_numeric($data['id'])){
            return;
        }

        $personal_section = $data['sec_1'];

        $resume_ai_string_main = '';

        if (!empty($personal_section['application_title'])) {
            $resume_ai_string_main .= wpjobportalphplib::wpJP_trim($personal_section['application_title']) . ' ';
        }


        // Job Category
        if (!empty($personal_section['job_category']) && is_numeric($personal_section['job_category'])) {
            $cat_id = $personal_section['job_category'];
            $cat_title = WPJOBPORTALincluder::getJSModel('category')->getTitleByCategory($cat_id);
            if ($cat_title) {
                $resume_ai_string_main .= $cat_title . ' ';
            }
        }

        // Job Type
        if(!isset(wpjobportal::$_data['ai']['resume']['jobtypes'])){
            wpjobportal::$_data['ai']['resume']['jobtypes'] = array();
        }
        if (!empty($personal_section['jobtype']) && is_numeric($personal_section['jobtype'])) {
            $type_id = $personal_section['jobtype'];
            $jobtype_title = WPJOBPORTALincluder::getJSModel('jobtype')->getTitleByid($type_id);

            if ($jobtype_title) {
                $resume_ai_string_main .= $jobtype_title . ' ';
            }
        }

        // Nationality (Country)
        if(!isset(wpjobportal::$_data['ai']['resume']['countries'])){
            wpjobportal::$_data['ai']['resume']['countries'] = array();
        }
        if (!empty($personal_section['nationality']) && is_numeric($personal_section['nationality'])) {
            $country_id = $personal_section['nationality'];
            $cuntry_name = WPJOBPORTALincluder::getJSModel('country')->getCountryName($country_id);
            if ($cuntry_name) {
                $resume_ai_string_main .= $cuntry_name . ' ';
            }
        }

        if (!empty($personal_section['gender']) && is_numeric($personal_section['gender'])) {
            $gender_title = '';
            if($personal_section['gender'] == 1){
                $gender_title = esc_html(__('Male', 'wp-job-portal'));
            }elseif($personal_section['gender'] == 2){
                $gender_title = esc_html(__('Female', 'wp-job-portal'));
            }
            if($gender_title != ''){
                $resume_ai_string_main .= $gender_title . ' ';
            }
        }

        if (!empty($personal_section['salaryfixed'])) {
            $resume_ai_string_main .= wpjobportalphplib::wpJP_trim($personal_section['salaryfixed']) . ' ';
        }

        if (!empty($personal_section['tags'])) {
            $resume_ai_string_main .= wpjobportalphplib::wpJP_trim($personal_section['tags']) . ' ';
        }

        // handle custom fields

        $custom_fields = WPJOBPORTALincluder::getJSModel('customfield')->getUserfieldsfor(3,1);// 3 fieldfor 1 section;
        // ignore these field types from current case
        $skip_types = ['file', 'email', 'textarea'];

        $text_area_field_values = '';

        foreach ($custom_fields as $single_field) {
            if(!in_array($single_field->userfieldtype, $skip_types)){ // check if type agaisnt array
                if (!empty($personal_section[$single_field->field])) { // check value exsists
                    if(is_array($personal_section[$single_field->field])){ // to handle multi select and check box case
                        $resume_ai_string_main .= implode(',', $personal_section[$single_field->field]) . ' ';
                    }else{
                        $resume_ai_string_main .= $personal_section[$single_field->field] . ' ';
                    }
                }
            }elseif ($single_field->userfieldtype == 'textarea'){ // text area value to be included in description column
                if (!empty($personal_section[$single_field->field])) { // check value exsists
                    $text_area_field_values .= $personal_section[$single_field->field] . ' ';
                }
            }
        }

        $resume_ai_string_main = trim($resume_ai_string_main); // Clean trailing space

        // SEOND LEVEL
        $resume_ai_string_desc = $resume_ai_string_main;
        $resume_ai_string_desc .= $text_area_field_values; // append personal section text area here

        foreach ($data as $section => $fields) {
            if ($section == 'sec_1' ||  $section == 'sec_6' ||  $section == 'sec_7') {
                continue; // avoid un expected cases & Skip personal, resume and refrence section
            }

            if(!is_array($fields) ){ // skip fields that are are not sections
                continue;
            }
            $num_entries = count(reset($fields)); // to handle multiple section instances of same section
            for ($i = 0; $i < $num_entries; $i++) {
                if (!empty($fields['deletethis'][$i]) && $fields['deletethis'][$i] == 1) { // ignore delete this indexes
                    continue;
                }

                $record_string = "";
                foreach ($fields as $key => $values) {
                    $value = $values[$i] ?? '';

                    // Collect address_city values separately
                    if ($key === 'address_city' && !empty($value)) { // handle cityids to get complete location name
                        $location_string = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView($value);
                        if($location_string){ // the above function may return false
                            $value = $location_string;
                            $resume_ai_string_main .= $location_string." ";
                        }
                    }
                    if ($key === 'deletethis') { // ignore delete this case
                        continue;
                    }
                     // If value is a nested array, flatten it
                    if (is_array($value)) {
                        $value = implode(",", array_filter($value));
                    }
                    if (!empty($value)) {
                        $record_string .= $value." ";
                    }
                }
                $resume_ai_string_desc .= $record_string. " "; //add current section's current instance value to main string
            }
        }

        // handle custom sections

        $resumesections = WPJOBPORTALincluder::getJSModel('fieldordering')->getResumeSections();
        foreach ($resumesections as $section) {
            if($section->section <= 8){ // avoid the default resume sections
                continue;
            }
            // get fields for section
            $custom_fields = WPJOBPORTALincluder::getJSModel('customfield')->getUserfieldsfor(3,$section->section);// 3 fieldfor $section->section for section
            // ignore these field types from current case
            $skip_types = ['file', 'email'];

            foreach ($custom_fields as $single_field) {
                if(!in_array($single_field->userfieldtype, $skip_types)){ // check if type agaisnt array
                    if (!empty($data[$single_field->field])) { // check value exsists
                        if(is_array($data[$single_field->field])){ // to handle multi select and check box case
                            $resume_ai_string_desc .= implode(',', $data[$single_field->field]) . ' ';
                        }else{
                            $resume_ai_string_desc .= $data[$single_field->field] . ' ';
                        }
                    }
                }
            }
        }

        $row = WPJOBPORTALincluder::getJSTable('resume');
        if ($row->update(array('id'=>$data['id'], 'airesumesearchtext' => $resume_ai_string_main, 'airesumesearchdescription' => $resume_ai_string_desc))) {
            return;
        }
        return;
    }

    function importAIStringDataForResume($personal_section){
        if(empty($personal_section)){
            return;
        }
        if(!is_numeric($personal_section['id'])){
            return;
        }

        $resume_ai_string_main = '';

        if (!empty($personal_section['application_title'])) {
            $resume_ai_string_main .= wpjobportalphplib::wpJP_trim($personal_section['application_title']) . ' ';
        }

        // Initialize ai temp caches if not already exsist

        if(!isset(wpjobportal::$_data['ai'])){
            wpjobportal::$_data['ai'] = array();
        }
        // second level set to resume to avoid conflit with job records
        if(!isset(wpjobportal::$_data['ai']['resume'])){
            wpjobportal::$_data['ai']['resume'] = array();
        }

        if(!isset(wpjobportal::$_data['ai']['resume']['categories'])){
            wpjobportal::$_data['ai']['resume']['categories'] = array();
        }
        // Job Category
        if (!empty($personal_section['job_category']) && is_numeric($personal_section['job_category'])) {
            $cat_id = $personal_section['job_category'];
            if (!isset(wpjobportal::$_data['ai']['resume']['categories'][$cat_id])) {
                $cat_title = WPJOBPORTALincluder::getJSModel('category')->getTitleByCategory($cat_id);
                wpjobportal::$_data['ai']['resume']['categories'][$cat_id] = $cat_title;
            } else {
                $cat_title = wpjobportal::$_data['ai']['resume']['categories'][$cat_id];
            }

            if ($cat_title) {
                $resume_ai_string_main .= $cat_title . ' ';
            }
        }

        // Job Type
        if(!isset(wpjobportal::$_data['ai']['resume']['jobtypes'])){
            wpjobportal::$_data['ai']['resume']['jobtypes'] = array();
        }
        if (!empty($personal_section['jobtype']) && is_numeric($personal_section['jobtype'])) {
            $type_id = $personal_section['jobtype'];
            if (!isset(wpjobportal::$_data['ai']['resume']['jobtypes'][$type_id])) {
                $jobtype_title = WPJOBPORTALincluder::getJSModel('jobtype')->getTitleByid($type_id);
                wpjobportal::$_data['ai']['resume']['jobtypes'][$type_id] = $jobtype_title;
            } else {
                $jobtype_title = wpjobportal::$_data['ai']['resume']['jobtypes'][$type_id];
            }

            if ($jobtype_title) {
                $resume_ai_string_main .= $jobtype_title . ' ';
            }
        }

        // Nationality (Country)
        if(!isset(wpjobportal::$_data['ai']['resume']['countries'])){
            wpjobportal::$_data['ai']['resume']['countries'] = array();
        }
        if (!empty($personal_section['nationality']) && is_numeric($personal_section['nationality'])) {
            $country_id = $personal_section['nationality'];
            if (!isset(wpjobportal::$_data['ai']['resume']['countries'][$country_id])) {
                $cuntry_name = WPJOBPORTALincluder::getJSModel('country')->getCountryName($country_id);
                wpjobportal::$_data['ai']['resume']['countries'][$country_id] = $cuntry_name;
            } else {
                $cuntry_name = wpjobportal::$_data['ai']['resume']['countries'][$country_id];
            }

            if ($cuntry_name) {
                $resume_ai_string_main .= $cuntry_name . ' ';
            }
        }

        if (!empty($personal_section['gender']) && is_numeric($personal_section['gender'])) {
            $gender_title = '';
            if($personal_section['gender'] == 1){
                $gender_title = esc_html(__('Male', 'wp-job-portal'));
            }elseif($personal_section['gender'] == 2){
                $gender_title = esc_html(__('Female', 'wp-job-portal'));
            }
            if($gender_title != ''){
                $resume_ai_string_main .= $gender_title . ' ';
            }
        }

        if (!empty($personal_section['salaryfixed'])) {
            $resume_ai_string_main .= wpjobportalphplib::wpJP_trim($personal_section['salaryfixed']) . ' ';
        }

        if (!empty($personal_section['tags'])) {
            $resume_ai_string_main .= wpjobportalphplib::wpJP_trim($personal_section['tags']) . ' ';
        }

        // handle custom fields
        if(!isset(wpjobportal::$_data['ai']['customfields_user_3'])){
            wpjobportal::$_data['ai']['customfields_user_3'] = WPJOBPORTALincluder::getJSModel('customfield')->getUserfieldsfor(3,1);// 3 fieldfor 1 section;
        }

        $custom_fields = wpjobportal::$_data['ai']['customfields_user_3'];
        // $custom_fields = WPJOBPORTALincluder::getJSModel('customfield')->getUserfieldsfor(3,1);// 3 fieldfor 1 section
        // ignore these field types from current case
        $skip_types = ['file', 'email', 'textarea'];

        $text_area_field_values = '';

        foreach ($custom_fields as $single_field) {
            if(!in_array($single_field->userfieldtype, $skip_types)){ // check if type agaisnt array
                if (!empty($personal_section[$single_field->field])) { // check value exsists
                    if(is_array($personal_section[$single_field->field])){ // to handle multi select and check box case
                        $resume_ai_string_main .= implode(',', $personal_section[$single_field->field]) . ' ';
                    }else{
                        $resume_ai_string_main .= $personal_section[$single_field->field] . ' ';
                    }
                }
            }elseif ($single_field->userfieldtype == 'textarea'){
                if (!empty($personal_section[$single_field->field])) { // check value exsists
                    $text_area_field_values .= $personal_section[$single_field->field] . ' ';
                }
            }
        }

        $resume_ai_string_main = trim($resume_ai_string_main); // Clean trailing space

        // SEOND LEVEL
        $resume_ai_string_desc = $resume_ai_string_main;
        $resume_ai_string_desc .= $text_area_field_values; // append personal section text area here

        // handle custom sections

        $resumesections = WPJOBPORTALincluder::getJSModel('fieldordering')->getResumeSections();

        // resume sections
        // if(in_array('advanceresumebuilder', wpjobportal::$_active_addons)){
        foreach ($resumesections AS $section) {
            switch ($section->field){
                case 'section_address':
                    $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3 , $section->section);// 3 for resume section for section
                    $section_data = $this->getAddressSectionDataForAI($personal_section['id'],$fields);
                    $resume_ai_string_main .= $section_data['location_names'];
                    $resume_ai_string_desc .= $section_data['address_string'];
                break;
                case 'section_education':
                    $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3 , $section->section);// 3 for resume section for section
                    $section_data = $this->getEducationSectionDataForAI($personal_section['id'],$fields);
                    $resume_ai_string_desc .= $section_data;
                    break;
                case 'section_employer':
                    $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3 , $section->section);// 3 for resume section for section
                    $section_data = $this->getEmployerSectionDataForAI($personal_section['id'],$fields);
                    $resume_ai_string_desc .= $section_data;
                    break;
                case 'section_skills':
                    $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3 , $section->section);// 3 for resume section for section
                    $section_data = $this->getSkillSectionDataForAI($personal_section['id'],$fields,$personal_section);
                    $resume_ai_string_desc .= $section_data;
                    break;
                case 'section_language':
                    $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3 , $section->section);// 3 for resume section for section
                    $section_data = $this->getLanguageSectionDataForAI($personal_section['id'],$fields);
                    $resume_ai_string_desc .= $section_data;
                    break;
                default:
                    if($section->is_section_headline == 1){ // to print resume custom sections
                        if($section->field != 'section_resume' && $section->section > 8){ // avoid resume editor section legacy code issue and anyother section
                            $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor(3 , $section->section);// 3 for resume section for section
                            $section_data = $this->getCustomSectionDataForAI($personal_section['id'],$fields,$personal_section);
                            $resume_ai_string_desc .= $section_data;
                        }
                    }
                break;
            }
        }

        // echo var_dump($resume_ai_string_desc);
        // echo '<br>';
        // echo '<br>';
        // echo '<br>';
        // return;
        // foreach ($resumesections as $section) {
        //     if($section->section <= 8){ // avoid the default resume sections
        //         continue;
        //     }
        //     // get fields for section
        //     $custom_fields = WPJOBPORTALincluder::getJSModel('customfield')->getUserfieldsfor(3,$section->section);// 3 fieldfor $section->section for section
        //     // ignore these field types from current case
        //     $skip_types = ['file', 'email'];

        //     foreach ($custom_fields as $single_field) {
        //         if(!in_array($single_field->userfieldtype, $skip_types)){ // check if type agaisnt array
        //             if (!empty($data[$single_field->field])) { // check value exsists
        //                 if(is_array($data[$single_field->field])){ // to handle multi select and check box case
        //                     $resume_ai_string_desc .= implode(',', $data[$single_field->field]) . ' ';
        //                 }else{
        //                     $resume_ai_string_desc .= $data[$single_field->field] . ' ';
        //                 }
        //             }
        //         }
        //     }
        // }

        $row = WPJOBPORTALincluder::getJSTable('resume');
        if ($row->update(array('id'=>$personal_section['id'], 'airesumesearchtext' => $resume_ai_string_main, 'airesumesearchdescription' => $resume_ai_string_desc))) {
            return;
        }
        return;
    }

    // get resume address sections by resume id
    function getAddressSectionDataForAI($resumeid,$fields){
        if (!is_numeric($resumeid))
            return false;

        $return_data = array();

        $query = "SELECT resumeaddress.address_city, resumeaddress.address
                        ,resumeaddress.params,resumeaddress.longitude,resumeaddress.latitude
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeaddresses` resumeaddress
                    WHERE resumeaddress.resumeid = " . esc_sql($resumeid);

        $results = wpjobportaldb::get_results($query);
        $resume_address_section_string = '';
        $main_string_location_names = '';
        $skip_types = ['file', 'email'];
        if(!empty($results)){
            foreach ($results as $address) {

                // address city
                if(!empty($address->address_city)){
                    $location_name = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView($address->address_city);
                    if($location_name != ''){
                        $resume_address_section_string .= $location_name.' ';
                        $main_string_location_names .= $location_name.' ';
                    }
                }

                // address
                if(!empty($address->address)){
                    $resume_address_section_string .= $address->address.' ';
                }

                // latitude
                if(!empty($address->latitude)){
                    $resume_address_section_string .= $address->latitude.' ';
                }
                // longitude
                if(!empty($address->longitude)){
                    $resume_address_section_string .= $address->longitude.' ';
                }

                // params
                if(!empty($address->params)){
                    $params = json_decode($address->params,true);
                }


                // custom field for address section
                // $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , 2);// 3 for resume 2 for address section
                foreach($fields AS $field){
                    if(!in_array($field->userfieldtype,$skip_types)){
                        if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                            $resume_address_section_string .= $params[$field->field].' ';
                        }
                    }
                }
            }
        }

        $return_data['address_string'] = $resume_address_section_string;
        $return_data['location_names'] = $main_string_location_names;
        return $return_data;
    }

    // get resume institutes sections by resume id
    function getEducationSectionDataForAI($resumeid,$fields){
        if (!is_numeric($resumeid))
            return false;

        $return_data = '';

        $query = "SELECT resumeinstitute.institute, resumeinstitute.institute_certificate_name
                        ,resumeinstitute.params,resumeinstitute.institute_study_area,resumeinstitute.todate,resumeinstitute.fromdate
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeinstitutes` resumeinstitute
                    WHERE resumeinstitute.resumeid = " . esc_sql($resumeid);

        $results = wpjobportaldb::get_results($query);
        $resume_institute_section_string = '';
        $skip_types = ['file', 'email'];
        if(!empty($results)){
            foreach ($results as $resumeinstitute) {
                // institute
                if(!empty($resumeinstitute->institute)){
                    $resume_institute_section_string .= $resumeinstitute->institute.' ';
                }

                // institute_certificate_name
                if(!empty($resumeinstitute->institute_certificate_name)){
                    $resume_institute_section_string .= $resumeinstitute->institute_certificate_name.' ';
                }
                // institute_study_area
                if(!empty($resumeinstitute->institute_study_area)){
                    $resume_institute_section_string .= $resumeinstitute->institute_study_area.' ';
                }
                // todate
                if(!empty($resumeinstitute->todate)){
                    $resume_institute_section_string .= $resumeinstitute->todate.' ';
                }
                // fromdate
                if(!empty($resumeinstitute->fromdate)){
                    $resume_institute_section_string .= $resumeinstitute->fromdate.' ';
                }

                if(!empty($resumeinstitute->params)){
                    $params = json_decode($resumeinstitute->params,true);
                }

                // custom field for resumeinstitute section
                // $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , 3);// 3 for resume 3 for institute section
                foreach($fields AS $field){
                    if(!in_array($field->userfieldtype,$skip_types)){
                        if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                            $resume_institute_section_string .= $params[$field->field].' ';
                        }
                    }
                }
            }
        }

        $return_data = $resume_institute_section_string;
        return $return_data;
    }


    // get resume employer sections by resume id
    function getEmployerSectionDataForAI($resumeid,$fields){
        if (!is_numeric($resumeid))
            return false;

        $return_data = '';

        $query = "SELECT resumeemployer.employer, resumeemployer.employer_position, resumeemployer.employer_from_date
                    , resumeemployer.employer_current_status, resumeemployer.employer_to_date, resumeemployer.employer_phone
                    , resumeemployer.employer_address, resumeemployer.employer_city, resumeemployer.params
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeemployers` resumeemployer
                    WHERE resumeemployer.resumeid = " . esc_sql($resumeid);

        $results = wpjobportaldb::get_results($query);
        $resume_employer_section_string = '';
        $skip_types = ['file', 'email'];
        if(!empty($results)){
            foreach ($results as $resumeemployer) {

                // employer
                if(!empty($resumeemployer->employer)){
                    $resume_employer_section_string .= $resumeemployer->employer.' ';
                }

                // employer_position
                if(!empty($resumeemployer->employer_position)){
                    $resume_employer_section_string .= $resumeemployer->employer_position.' ';
                }

                // employer_from_date
                if(!empty($resumeemployer->employer_from_date)){
                    $resume_employer_section_string .= $resumeemployer->employer_from_date.' ';
                }

                // employer_current_status
                if(!empty($resumeemployer->employer_current_status)){
                    $resume_employer_section_string .= $resumeemployer->employer_current_status.' ';
                }

                // employer_to_date
                if(!empty($resumeemployer->employer_to_date)){
                    $resume_employer_section_string .= $resumeemployer->employer_to_date.' ';
                }

                // employer_phone
                if(!empty($resumeemployer->employer_phone)){
                    $resume_employer_section_string .= $resumeemployer->employer_phone.' ';
                }

                // employer_address
                if(!empty($resumeemployer->employer_address)){
                    $resume_employer_section_string .= $resumeemployer->employer_address.' ';
                }

                // address city
                if(!empty($resumeemployer->employer_city)){
                    $location_name = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView($resumeemployer->employer_city);
                    if($location_name != ''){
                        $resume_employer_section_string .= $location_name.' ';
                    }
                }

                if(!empty($resumeemployer->params)){
                    $params = json_decode($resumeemployer->params,true);
                }

                // custom field for resumeemployer section
                // $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , 3);// 3 for resume 3 for institute section
                foreach($fields AS $field){
                    if(!in_array($field->userfieldtype,$skip_types)){
                        if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                            $resume_employer_section_string .= $params[$field->field].' ';
                        }
                    }
                }
            }
        }

        $return_data = $resume_employer_section_string;
        return $return_data;
    }


    // get resume skill sections by resume id
    function getSkillSectionDataForAI($resumeid,$fields,$data){
        if (!is_numeric($resumeid))
            return false;

        $return_data = '';
        $resume_skill_section_string = '';
		$skip_types = ['file', 'email'];


        // skill
        if(!empty($data['skills'])){
            $resume_skill_section_string .= $data['skills'].' ';
        }

        if(!empty($data['params'])){
            $params = json_decode($data['params'],true);
        }

        // custom field for resumeemployer section
        // $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , 3);// 3 for resume 3 for institute section
        foreach($fields AS $field){
            if(!in_array($field->userfieldtype,$skip_types)){
                if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                    $resume_skill_section_string .= $params[$field->field].' ';
                }
            }
        }


        $return_data = $resume_skill_section_string;
        return $return_data;
    }

    // get resume language sections by resume id
    function getLanguageSectionDataForAI($resumeid,$fields){
        if (!is_numeric($resumeid))
            return false;

        $return_data = '';

        $query = "SELECT resumelanguage.language,  resumelanguage.params
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumelanguages` resumelanguage
                    WHERE resumelanguage.resumeid = " . esc_sql($resumeid);

        $results = wpjobportaldb::get_results($query);
        $resume_language_section_string = '';
        $skip_types = ['file', 'email'];
        if(!empty($results)){
            foreach ($results as $resumelanguage) {

                // language
                if(!empty($resumelanguage->language)){
                    $resume_language_section_string .= $resumelanguage->language.' ';
                }

                if(!empty($resumelanguage->params)){
                    $params = json_decode($resumelanguage->params,true);
                }

                // custom field for resumelanguage section
                // $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , 3);// 3 for resume 3 for institute section
                foreach($fields AS $field){
                    if(!in_array($field->userfieldtype,$skip_types)){
                        if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                            $resume_language_section_string .= $params[$field->field].' ';
                        }
                    }
                }
            }
        }

        $return_data = $resume_language_section_string;
        return $return_data;
    }


    // get resume skill sections by resume id
    function getCustomSectionDataForAI($resumeid,$fields,$data){
        if (!is_numeric($resumeid))
            return false;

        $return_data = '';
        $resume_custom_section_string = '';

        if(!empty($data['params'])){
            $params = json_decode($data['params'],true);
        }
        $skip_types = ['file', 'email'];
        // custom field for resumeemployer section
        // $fields = wpjobportal::$_wpjpfieldordering->getUserfieldsfor( 3 , 3);// 3 for resume 3 for institute section
        foreach($fields AS $field){
            if(!in_array($field->userfieldtype,$skip_types)){
                if(isset($params[$field->field]) && $params[$field->field] != ''){ // only add value for a section once. not for all its custom fields
                    $resume_custom_section_string .= $params[$field->field].' ';
                }
            }
        }


        $return_data = $resume_custom_section_string;
        return $return_data;
    }
}
?>

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists