Sindbad~EG File Manager

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

<?php

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

class WPJOBPORTALCommonModel {

    public $module_name = '';
    public $file_name = '';


    function removeSpecialCharacter($string) {
        $string = sanitize_title($string);
        return $string;
    }

    function stringToAlias($string){
        $string = $this->removeSpecialCharacter($string);
        $string = wpjobportalphplib::wpJP_strtolower(wpjobportalphplib::wpJP_str_replace(' ', '-', $string));
        $string = wpjobportalphplib::wpJP_strtolower(wpjobportalphplib::wpJP_str_replace('_', '-', $string));
        return $string;
    }

     function getTimeForView($time,$unit){
        // made the change to translate unit value(day,days,week,weeks etc)
        if($time > 1){
            $unit .= 's';
        }
        $text = $time.' '.wpjobportal::wpjobportal_getVariableValue(wpjobportalphplib::wpJP_ucfirst($unit));
        return $text;
    }

    function getGoogleMapApiAddress() {

        $filekey = wp_remote_get(esc_html(WPJOBPORTAL_PLUGIN_URL).'/includes/google-map-js.inc.php');
        if (is_wp_error($filekey)) {
            return '';
        }
        $file_key_string= $filekey['body'];
        //echo var_dump($file_key_string);die('comommm');

        $key =wpjobportal::$_configuration['google_map_api_key'];
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $matcharray = array(
            '{PROTOCOL}' => $protocol,
            '{KEY}' => $key,
        );
        foreach ($matcharray AS $find => $replace) {
            $file_key_string = wpjobportalphplib::wpJP_str_replace($find, $replace, $file_key_string);
        }
        return $file_key_string;
    }

    function getFancyPrice($price,$currentyid=0,$override_config=array()){
        $currency_align = isset($override_config['currency_align']) ? $override_config['currency_align'] : wpjobportal::$_configuration['currency_align'];
        $thousand_separator = isset($override_config['thousand_separator']) ? $override_config['thousand_separator'] : wpjobportal::$_configuration['thousand_separator'];
        $short_price = isset($override_config['short_price']) ? $override_config['short_price'] : wpjobportal::$_configuration['short_price'];
        if(isset($override_config['decimal_places'])){
            if($override_config['decimal_places'] === 'fit_to_currency' && $currentyid){
                $decimal_places = '';//wpjobportalphplib::wpJP_strlen(WPJOBPORTALincluder::getJSModel('currency')->getCurrencySmallestUnit($currentyid))-1;
            }else{
                $decimal_places = $override_config['decimal_places'];
            }
        }else{
            $decimal_places = wpjobportal::$_configuration['decimal_places'];
        }

        $text = '';
        if($currency_align == 1 && $currentyid ){//left
            $text .= WPJOBPORTALincluder::getJSModel('currency')->getCurrencySymbol($currentyid);
        }

        if( $short_price ){
            $text .= $this->getShortFormatPrice($price);
        }else{
            $text .= wpjobportalphplib::wpJP_number_format($price,$decimal_places,'.',$thousand_separator);
        }

        if($currency_align == 2 && $currentyid ){ //right
            $text .= WPJOBPORTALincluder::getJSModel('currency')->getCurrencySymbol($currentyid);
        }
        return $text;
    }

    function getShortFormatPrice($n, $precision = 1){
        if($n < 900) {
            // 0 - 900
            $n_format = wpjobportalphplib::wpJP_number_format($n, $precision);
            $suffix = '';
        }else if($n < 900000) {
            // 0.9k-850k
            $n_format = wpjobportalphplib::wpJP_number_format($n / 1000, $precision);
            $suffix = 'K';
        }else if($n < 900000000) {
            // 0.9m-850m
            $n_format = wpjobportalphplib::wpJP_number_format($n / 1000000, $precision);
            $suffix = 'M';
        }else if($n < 900000000000) {
            // 0.9b-850b
            $n_format = wpjobportalphplib::wpJP_number_format($n / 1000000000, $precision);
            $suffix = 'B';
        }else{
            // 0.9t+
            $n_format = wpjobportalphplib::wpJP_number_format($n / 1000000000000, $precision);
            $suffix = 'T';
        }
      // Remove unecessary zeroes after decimal. "1.0" -> "1"; "1.00" -> "1"
      // Intentionally does not affect partials, eg "1.50" -> "1.50"
        if( $precision > 0 ) {
            $dotzero = '.' . wpjobportalphplib::wpJP_str_repeat( '0', $precision );
            $n_format = wpjobportalphplib::wpJP_str_replace( $dotzero, '', $n_format );
        }
        return $n_format . $suffix;
    }
    /**
    * @param wp job portal Function's
    * @param Get Status
    */
    function setDefaultForDefaultTable($id, $tablename) {
        if (is_numeric($id) == false)
            return false;

        switch ($tablename) {
            case "jobtypes":
            case "jobstatus":
            case "heighesteducation":
            case "careerlevels":
            case "experiences":
            case "currencies":
            case "salaryrangetypes":
            case "categories":
            case "subcategories":
                if (self::checkCanMakeDefault($id, $tablename)) {
                    if ($tablename == "currencies")
                        $column = "default";
                    else
                        $column = "isdefault";
                    //DB class limitations
                    $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($tablename) . "` AS t SET t." . esc_sql($column) . " = 0 ";
                    wpjobportaldb::query($query);
                    $query = "UPDATE  `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($tablename) . "` AS t SET t." . esc_sql($column) . " = 1 WHERE id=" . esc_sql($id);
                    if (!wpjobportaldb::query($query))
                        return WPJOBPORTAL_SET_DEFAULT_ERROR;
                    else
                        return WPJOBPORTAL_SET_DEFAULT;
                    break;
                }else {
                    return WPJOBPORTAL_UNPUBLISH_DEFAULT_ERROR;
                }
                break;
        }
    }

    function checkCanMakeDefault($id, $tablename) {
        if (!is_numeric($id))
            return false;
        switch ($tablename) {
            case 'jobtypes':
            case 'jobstatus':
            case 'heighesteducation':
            case 'categories':
                $column = "isactive";
                break;
            default:
                $column = "status";
                break;
        }
        $query = "SELECT " . esc_sql($column) . " FROM `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($tablename) . "` WHERE id=" . esc_sql($id);
        $res = wpjobportaldb::get_var($query);
        if ($res == 1)
            return true;
        else
            return false;
    }

    function getTranskey($option_name){
         $query = "SELECT `option_value` FROM " . wpjobportal::$_wpprefixforuser . "options WHERE option_name = '".esc_sql($option_name)."'";
         $transactionKey = wpjobportaldb::get_var($query);
         return $transactionKey;
    }

      function getDefaultValue($table) {

        switch ($table) {
            case "categories":
            case "jobtypes":
            case "jobstatus":
            case "shifts":
            case "heighesteducation":
            case "ages":
            case "careerlevels":
            case "experiences":
            case "salaryrange":
            case "salaryrangetypes":
            case "subcategories":
                $query = "SELECT id FROM `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` WHERE isdefault=1";

                $default_id = wpjobportaldb::get_var($query);
                if ($default_id)
                    return $default_id;
                else {
                    $query = "SELECT min(id) AS id FROM `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "`";

                    $min_id = wpjobportaldb::get_var($query);
                    return $min_id;
                }
            case "currencies":
                $query = "SELECT id FROM `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` WHERE `default`=1";

                $default_id = wpjobportaldb::get_var($query);
                if ($default_id)
                    return $default_id;
                else {
                    $query = "SELECT min(id) AS id FROM `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "`";

                    $min_id = wpjobportaldb::get_var($query);
                    return $min_id;
                }
                break;
        }
    }

    // function setOrderingUpForDefaultTable($field_id, $table) {
    //     if (is_numeric($field_id) == false)
    //         return false;
    //     //DB class limitations
    //     if($table == 'categories'){
    //         $parentid = wpjobportal::$_db->get_var("SELECT parentid FROM `".wpjobportal::$_db->prefix."wj_portal_categories` WHERE id = ".esc_sql($field_id));
    //         $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f1, `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f2
    //                     SET f1.ordering = f1.ordering + 1
    //                     WHERE f1.ordering = f2.ordering - 1 AND f1.parentid = ".esc_sql($parentid)."
    //                     AND f2.id = " . esc_sql($field_id);
    //     }else{
    //         $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f1, `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f2
    //                     SET f1.ordering = f1.ordering + 1
    //                     WHERE f1.ordering = f2.ordering - 1
    //                     AND f2.id = " . esc_sql($field_id);
    //     }
    //     if (false == wpjobportaldb::query($query)) {
    //         return WPJOBPORTAL_ORDER_UP_ERROR;
    //     }
    //     $query = " UPDATE " . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "
    //                 SET ordering = ordering - 1
    //                 WHERE id = " . esc_sql($field_id);

    //     if (false == wpjobportaldb::query($query)) {
    //         return WPJOBPORTAL_ORDER_UP_ERROR;
    //     }
    //     return WPJOBPORTAL_ORDER_UP;
    // }

    // function setOrderingDownForDefaultTable($field_id, $table) {
    //     if (is_numeric($field_id) == false)
    //         return false;
    //     //DB class limitations
    //     if($table == 'categories'){
    //         $parentid = wpjobportal::$_db->get_var("SELECT parentid FROM `".wpjobportal::$_db->prefix."wj_portal_categories` WHERE id = ".esc_sql($field_id));
    //         $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f1, `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f2
    //                     SET f1.ordering = f1.ordering - 1
    //                     WHERE f1.ordering = f2.ordering + 1 AND f1.parentid = ".esc_sql($parentid)."
    //                     AND f2.id = " . esc_sql($field_id);
    //     }else{
    //         $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f1, `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "` AS f2
    //                     SET f1.ordering = f1.ordering - 1
    //                     WHERE f1.ordering = f2.ordering + 1
    //                     AND f2.id = " . esc_sql($field_id);
    //     }

    //     if (false == wpjobportaldb::query($query)) {
    //         return WPJOBPORTAL_ORDER_DOWN_ERROR;
    //     }
    //     $query = " UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_" . esc_sql($table) . "`
    //                 SET ordering = ordering + 1
    //                 WHERE id = " . esc_sql($field_id);

    //     if (false == wpjobportaldb::query($query)) {
    //         return WPJOBPORTAL_ORDER_DOWN_ERROR;
    //     }
    //     return WPJOBPORTAL_ORDER_DOWN;
    // }

     function getMultiSelectEdit($id, $for) {
        if (!is_numeric($id))
            return false;
        $config = wpjobportal::$_config->getConfigByFor('default');
       $query = "SELECT city.id AS id, CONCAT(city.name";
        switch ($config['defaultaddressdisplaytype']) {
            case 'csc'://City, State, Country
                $query .= " ,', ', (IF(state.name is not null,state.name,'')),IF(state.name is not null,', ',''),country.name)";
                break;
            case 'cs'://City, State
                $query .= " ,', ', (IF(state.name is not null,state.name,'')))";
                break;
            case 'cc'://City, Country
                $query .= " ,', ', country.name)";
                break;
            case 'c'://city by default select for each case
                $query .= ")";
                break;
        }
        $query .= " AS name ,city.latitude,city.longitude";
        switch ($for) {
            case 1:
                $query .= " FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobcities` AS mcity";
                break;
            case 2:
                $query .= " FROM `" . wpjobportal::$_db->prefix . "wj_portal_companycities` AS mcity";
                break;
            case 3:
                $query .= " FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobalertcities` AS mcity";
                break;
        }
        $query .=" JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city on city.id=mcity.cityid
                  JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country on city.countryid=country.id
                  LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state on city.stateid=state.id";
        switch ($for) {
            case 1:
                $query .= " WHERE mcity.jobid = ".esc_sql($id)." AND country.enabled = 1 AND city.enabled = 1";
                break;
            case 2:
                $query .= " WHERE mcity.companyid = ".esc_sql($id)." AND country.enabled = 1 AND city.enabled = 1";
                break;
            case 3:
                $query .= " WHERE mcity.alertid = ".esc_sql($id)." AND country.enabled = 1 AND city.enabled = 1";
                break;
        }
        $result = wpjobportaldb::get_results($query);
        $json_array = wp_json_encode($result);
        if (empty($json_array))
            return null;
        else
            return $json_array;
    }

    function getRequiredTravel() {
        $requiredtravel = array();
        $requiredtravel[] = (object) array('id' => 1, 'text' => esc_html(__('Not Required', 'wp-job-portal')));
        $requiredtravel[] = (object) array('id' => 2, 'text' => esc_html(__('25 Per', 'wp-job-portal')));
        $requiredtravel[] = (object) array('id' => 3, 'text' => esc_html(__('50 Per', 'wp-job-portal')));
        $requiredtravel[] = (object) array('id' => 4, 'text' => esc_html(__('75 Per', 'wp-job-portal')));
        $requiredtravel[] = (object) array('id' => 5, 'text' => esc_html(__('100 Per', 'wp-job-portal')));
        return $requiredtravel;
    }

    function getRequiredTravelValue($value) {
        switch ($value) {
            case '1': return esc_html(__('Not Required', 'wp-job-portal')); break;
            case '2': return esc_html(__('25 Per', 'wp-job-portal')); break;
            case '3': return esc_html(__('50 Per', 'wp-job-portal')); break;
            case '4': return esc_html(__('75 Per', 'wp-job-portal')); break;
            case '5': return esc_html(__('100 Per', 'wp-job-portal')); break;
        }
    }

    /**
    * @param wp job portal Function
    * @param Log Action's
    */

    function getLogAction($for) {
        $logaction = array();
        if ($for == 1) { //employer
            $logaction[] = (object) array('id' => 'add_company', 'text' => esc_html(__('New company', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'featured_company', 'text' => esc_html(__('Featured company', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'add_department', 'text' => esc_html(__('New department', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'add_job', 'text' => esc_html(__('New job', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'featured_job', 'text' => esc_html(__('Featured job', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'resume_save_search', 'text' => esc_html(__('Searched and saved resume', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'view_resume_contact_detail', 'text' => esc_html(__('Viewed resume contact details', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'featured_company_timeperiod', 'text' => esc_html(__('Featured company for time period', 'wp-job-portal')));
        }
        if ($for == 2) {
            $logaction[] = (object) array('id' => 'add_resume', 'text' => esc_html(__('New resume', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'featured_resume', 'text' => esc_html(__('Featured resume', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'add_cover_letter', 'text' => esc_html(__('New cover letter', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'job_alert_lifetime', 'text' => esc_html(__('Life time job alert', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'job_alert_time', 'text' => esc_html(__('Job alert', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'job_alert_timeperiod', 'text' => esc_html(__('Job alert for time', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'job_save_search', 'text' => esc_html(__('Saved a job search', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'shortlist_job', 'text' => esc_html(__('Job short listed', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'job_apply', 'text' => esc_html(__('Applied for job', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'view_job_apply_status', 'text' => esc_html(__('Viewed job status', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'view_company_contact_detail', 'text' => esc_html(__('Viewed company contact detail', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'tell_a_friend', 'text' => esc_html(__('Told a friend', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'job_save_filter', 'text' => esc_html(__('Saved a job filter', 'wp-job-portal')));
            $logaction[] = (object) array('id' => 'fb_share', 'text' => esc_html(__('Shared on social media', 'wp-job-portal')));
        }
        return $logaction;
    }

    function getMiniMax() {
        $minimax = array();
        $minimax[] = (object) array('id' => '1', 'text' => esc_html(__('Minimum', 'wp-job-portal')));
        $minimax[] = (object) array('id' => '2', 'text' => esc_html(__('Maximum', 'wp-job-portal')));
        return $minimax;
    }
    /**
    * @param wp job portal Function's
    * @param Get Yes Or No
    */

    function getYesNo() {
        $yesno = array();
        $yesno[] = (object) array('id' => '1', 'text' => esc_html(__('Yes', 'wp-job-portal')));
        $yesno[] = (object) array('id' => '0', 'text' => esc_html(__('No', 'wp-job-portal')));
        return $yesno;
    }

    /**
    * @param wp job portal Function's
    * @param Get gender
    */

    function getGender() {
        $gender = array();
        $gender[] = (object) array('id' => '1', 'text' => esc_html(__('Male', 'wp-job-portal')));
        $gender[] = (object) array('id' => '2', 'text' => esc_html(__('Female', 'wp-job-portal')));
        return $gender;
    }

    /**
    * @param wp job portal Function's
    * @param Get Status
    */

    function getStatus() {
        $status = array();
        $status[] = (object) array('id' => '1', 'text' => esc_html(__('Published', 'wp-job-portal')));
        $status[] = (object) array('id' => '0', 'text' => esc_html(__('Unpublished', 'wp-job-portal')));
        return $status;
    }

    function getTotalExp(&$resumeid){
        ///To get Total Experience From Resume Section's
        if(!is_numeric($resumeid)){
            return '';
        }
        $resume_id = $resumeid;
        $query ="SELECT resume.employer_from_date AS fromdate,resume.employer_to_date AS todate,resume.employer_current_status
                AS status FROM `" . wpjobportal::$_db->prefix . "wj_portal_resumeemployers` AS resume
                WHERE resumeid='".esc_sql($resume_id)."' ORDER BY ID ASC
                ";
        wpjobportal::$_data[3] = wpjobportaldb::get_results($query);
        $daystodate = wpjobportal::$_data[3];
        $totalYear = 0;
        $totalmonth = 0;
        $totaldays = 0;
        $html = '';
        for ($i=0; $i < count(wpjobportal::$_data[3]) ; $i++) {
            $status = $daystodate[$i]->status;
            $from = $daystodate[$i]->fromdate;
            $to   = $daystodate[$i]->todate;
            $diff = abs(strtotime($to) - strtotime($from));
            $years = floor($diff / (365*60*60*24));
            $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
            $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
            $totalYear += $years;
            $totalmonth += $months;
            $totaldays += $days;
        }

        if(!empty($daystodate)){

            if($totalYear > 0){
                $html.= $totalYear;

            }
            if($totalYear > 0 && $totalmonth > 5){
                $html.= '.5+'.' '.'Years';
            }else if($totalYear>0 && $totalmonth<=5) {
                $html.= ' '.'+'.'Years';
            }else if ($totalYear<=0 && $totalmonth<5) {
                $html.='Less than 1 year';
            }
            else{
                $html.='Less than 1 year';
            }
        }
        else{
            $html.="Fresh";
        }
        return $html;
    }

    /**
    * @param wp job portal Function
    * @param Option's For Job Alert
    */

    function getOptionsForJobAlert() {
        $status = array();
        $status[] = (object) array('id' => '1', 'text' => esc_html(__('Subscribed', 'wp-job-portal')));
        $status[] = (object) array('id' => '0', 'text' => esc_html(__('Unsubscribed', 'wp-job-portal')));
        return $status;
    }

    function getQueStatus() {
        $status = array();
        $status[] = (object) array('id' => '1', 'text' => esc_html(__('Approved', 'wp-job-portal')));
        $status[] = (object) array('id' => '-1', 'text' => esc_html(__('Rejected', 'wp-job-portal')));// rejected status is -1
        return $status;
    }

    /**
    * @param wp job portal
    * Roles For Combo
    */

    function getListingStatus() {
        $status = array();
        $status[] = (object) array('id' => '1', 'text' => esc_html(__('Approved', 'wp-job-portal')));
        $status[] = (object) array('id' => '-1', 'text' => esc_html(__('Rejected', 'wp-job-portal')));
        return $status;
    }

    /**
    * @param wp job portal
    * Roles For Combo
    */

    function getRolesForCombo() {
        $roles = array();
        $roles[] = (object) array('id' => '1', 'text' => esc_html(__('Employer', 'wp-job-portal')));
        $roles[] = (object) array('id' => '2', 'text' => esc_html(__('Job seeker', 'wp-job-portal')));
        return $roles;
    }

    /**
    * @param wp job portal
    * Fields Type's
    */

    function getFeilds() {
        $values = array();
        $values[] = (object) array('id' => 'text', 'text' => esc_html(__('Text Field', 'wp-job-portal')));
        $values[] = (object) array('id' => 'textarea', 'text' => esc_html(__('Text Area', 'wp-job-portal')));
        $values[] = (object) array('id' => 'checkbox', 'text' => esc_html(__('Check Box', 'wp-job-portal')));
        $values[] = (object) array('id' => 'date', 'text' => esc_html(__('Date', 'wp-job-portal')));
        $values[] = (object) array('id' => 'select', 'text' => esc_html(__('Drop Down', 'wp-job-portal')));
        $values[] = (object) array('id' => 'emailaddress', 'text' => esc_html(__('Email Address', 'wp-job-portal')));
        return $values;
    }

    /**
    * @param wp job portal
    * Radius Type
    */

    function getRadiusType() {
        $radiustype = array(
            (object) array('id' => '0', 'text' => esc_html(__('Select One', 'wp-job-portal'))),
            (object) array('id' => '1', 'text' => esc_html(__('Meters', 'wp-job-portal'))),
            (object) array('id' => '2', 'text' => esc_html(__('Kilometers', 'wp-job-portal'))),
            (object) array('id' => '3', 'text' => esc_html(__('Miles', 'wp-job-portal'))),
            (object) array('id' => '4', 'text' => esc_html(__('Nautical Miles', 'wp-job-portal'))),
        );
        return $radiustype;
    }

    /**
    * @param wp job portal
    * Rating
    */

     function getRating($rating){
        if(!is_numeric($rating)){
            $rating = 0;
        }
        $percent = ($rating/5)*100;
        $html ="<div class=\"wjportal-container-small\"" . ( " style=\"vertical-align:middle;display:inline-block;\"" ) . ">
            <ul class=\"wjportal-stars-small\">
                <li class=\"current-rating\" style=\"width:" . (int) $percent . "%;\"></li>
            </ul>
        </div>";
        return $html;
    }

       function getJobsStats_Widget($classname, $title, $showtitle, $employers, $jobseekers, $jobs, $companies, $activejobs, $resumes, $todaystats) {
        //listModuleJobs
        $curdate = gmdate('Y-m-d');
        $data = array();
        if ($employers == 1) {
            $query = "SELECT count(user.id) AS totalemployer
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_users` AS user
                WHERE user.roleid = 1";
            $data['employer'] = wpjobportaldb::get_var($query);
        }
        if ($jobseekers == 1) {
            $query = "SELECT count(user.id) AS totaljobseeker
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_users` AS user
                WHERE user.roleid = 2";
            $data['jobseeker'] = wpjobportaldb::get_var($query);
        }
        if ($jobs == 1) {
            $query = "SELECT count(job.id) AS totaljobs
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job
                WHERE job.status = 1 ";
            $data['totaljobs'] = wpjobportaldb::get_var($query);
        }
        if ($companies == 1) {
            $query = "SELECT count(company.id) AS totalcomapnies
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS company
                WHERE company.status = 1 ";
            $data['totalcompanies'] = wpjobportaldb::get_var($query);
        }
        if ($activejobs == 1) {
            $query = "SELECT count(job.id) AS totalactivejobs
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job
                WHERE job.status = 1 AND DATE(job.startpublishing) <= " . esc_sql($curdate) . " AND DATE(job.stoppublishing) >= " . esc_sql($curdate);
            $data['tatalactivejobs'] = wpjobportaldb::get_var($query);
        }
        if ($resumes == 1) {
            $query = "SELECT count(resume.id) AS totalresume
                FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                WHERE resume.status = 1 ";
            $data['totalresume'] = wpjobportaldb::get_var($query);
        }

        if ($todaystats == 1) {
            if ($employers == 1) {
                $query = "SELECT count(user.id) AS todayemployer
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_users` AS user
                    WHERE user.roleid = 1 AND DATE(user.created) = '" . esc_sql($curdate)."'";
                $data['todyemployer'] = wpjobportaldb::get_var($query);
            }
            if ($jobseekers == 1) {
                $query = "SELECT count(user.id) AS todayjobseeker
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_users` AS user
                    WHERE user.roleid = 2 AND DATE(user.created) = '" . esc_sql($curdate)."'";
                $data['todyjobseeker'] = wpjobportaldb::get_var($query);
            }
            if ($jobs == 1) {
                $query = "SELECT count(job.id) AS todayjobs
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job
                    WHERE job.status = 1 AND DATE(job.startpublishing) = '" . esc_sql($curdate)."'";

                $data['todayjobs'] = wpjobportaldb::get_var($query);
            }
            if ($companies == 1) {
                $query = "SELECT count(company.id) AS todaycomapnies
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS company
                    WHERE company.status = 1 AND DATE(company.created) = '" . esc_sql($curdate)."'";

                $data['todaycompanies'] = wpjobportaldb::get_var($query);
            }
            if ($activejobs == 1) {
                $query = "SELECT count(job.id) AS todayactivejobs
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job
                    WHERE job.status = 1 AND DATE(job.startpublishing) = '" . esc_sql($curdate)."'";
                $data['todayactivejobs'] = wpjobportaldb::get_var($query);
            }
            if ($resumes == 1) {
                $query = "SELECT count(resume.id) AS todayresume
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
                    WHERE resume.status = 1 AND DATE(resume.created) = '" . esc_sql($curdate)."'";
                $data['todayresume'] = wpjobportaldb::get_var($query);
            }
        }
        return $data;
    }

    /**
    * @param wp job portal
    * Image Extension's
    */

    function checkImageFileExtensions($file_name, $file_tmp, $image_extension_allow) {
        $allow_image_extension = wpjobportalphplib::wpJP_explode(',', $image_extension_allow);
        if ($file_name != "" AND $file_tmp != "") {
            $ext = $this->getExtension($file_name);
            $ext = wpjobportalphplib::wpJP_strtolower($ext);
            if (in_array($ext, $allow_image_extension))
                return true;
            else
                return false;
        }
    }

    function checkDocumentFileExtensions($file_name, $file_tmp, $document_extension_allow) {
        $allow_document_extension = wpjobportalphplib::wpJP_explode(',', $document_extension_allow);
        if ($file_name != '' AND $file_tmp != "") {
            $ext = $this->getExtension($file_name);
            $ext = wpjobportalphplib::wpJP_strtolower($ext);
            if (in_array($ext, $allow_document_extension))
                return true;
            else
                return false;
        }
    }

    function getExtension($str) {
        if($str == ''){
            return "";
        }
        $i = strrpos($str, ".");
        if (!$i) {
            return "";
        }
        $l = wpjobportalphplib::wpJP_strlen($str) - $i;
        $ext = wpjobportalphplib::wpJP_substr($str, $i + 1, $l);
        return $ext;
    }

    function makeDir($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 );
        }

        if (!$wp_filesystem->exists($path)) { // create directory
            $wp_filesystem->mkdir($path, 0755);
            $ourFileName = $path . '/index.html';
            $ourFileHandle = $wp_filesystem->put_contents($ourFileName,'');
            if($ourFileHandle !== false){
            }else{
                die("can't open file (".esc_html($ourFileName).")");
            }

        }
    }
    function WPJPcheck_field() {
		$autfored = WPJOBPORTALincluder::getJSModel('wpjobportal')->WPJPcheck_autfored(); 
        $encrypted_field = openssl_encrypt('ed', 'AES-128-ECB', $autfored);
        $option_name = 'wjportal_ed';
        $stored_data = get_option($option_name);

        if ($stored_data) {
            if ($stored_data['encrypted_field_name'] === $encrypted_field) {
                return true; // Match found
            }
        }
        return false; // No match
    }

    function getJobtempModelFrontend() {
        $componentPath = JPATH_SITE . '/components/com_wpjobportal';
        require_once $componentPath . '/models/jobtemp.php';
        $jobtemp_model = new WPJOBPORTALModelJobtemp();
        return $jobtemp_model;
    }

    function getSalaryRangeView($type, $min, $max, $currency=""){
        $salary = '';
        $currencysymbol =  isset($currency) ? $currency : wpjobportal::$_config->getConfigValue('job_currency');
        $currency_align = wpjobportal::$_config->getConfigValue('currency_align');
        // $min = wpjobportalphplib::wpJP_number_format((float)$min,2);
        // $max = wpjobportalphplib::wpJP_number_format((float)$max,2);
    if($min){
      if(fmod($min, 1) !== 0.00){
            $min = wpjobportalphplib::wpJP_number_format((float)$min,2);
        }else{
            $min = wpjobportalphplib::wpJP_number_format((float)$min);
        }
    }
      if($max){
          if(fmod($max, 1) !== 0.00){
              $max = wpjobportalphplib::wpJP_number_format((float)$max,2);
          }else{
              $max = wpjobportalphplib::wpJP_number_format((float)$max);
          }
      }
      
        if($type == 1){
            $salary = esc_html(__("Negotiable",'wp-job-portal'));
        }else if($type == 2){
            if($currency_align == 1){ // Left align
                $salary = $currencysymbol . ' ' . $min;
            }else if($currency_align == 2) { // Right align
                $salary = $min . ' ' . $currencysymbol;
            }
        }else if($type == 3){
            if($currency_align == 1){ // Left align
                $salary = $currencysymbol . ' ' . $min . ' - ' . $max;
            }else if($currency_align == 2){ // Right align
                $salary = $min . ' - ' . $max . ' ' . $currencysymbol;
            }
        }

        if(!empty($salary)){
            return $salary;
        }
    }

    function getYearMonth($args=array()){
            $previousTimeStamp = gmdate('Y-m-d',strtotime($args['originalDate']));
            $lastTimeStamp = gmdate('Y-m-d',strtotime($args['currentDate']));
            $diff = abs(strtotime($previousTimeStamp) - strtotime($lastTimeStamp));
            $years = floor($diff / (365*60*60*24));
            $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
            $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
            return array('month'=>$months,'days'=>$days,'years'=>$years);
    }

    function getLocationForView($cityname, $statename, $countryname) {
        $location = $cityname;
        $defaultaddressdisplaytype = wpjobportal::$_configuration['defaultaddressdisplaytype'];
        switch ($defaultaddressdisplaytype) {
            case 'csc':
                if ($statename)
                    $location .= ', ' . wpjobportal::wpjobportal_getVariableValue($statename);
                if ($countryname)
                    $location .= ', ' . wpjobportal::wpjobportal_getVariableValue($countryname);
                break;
            case 'cs':
                if ($statename)
                    $location .= ', ' . wpjobportal::wpjobportal_getVariableValue($statename);
                break;
            case 'cc':
                if ($countryname)
                    $location .= ', ' . wpjobportal::wpjobportal_getVariableValue($countryname);
                break;
        }
        return $location;
    }

    function getUidByObjectId($actionfor, $id) {
        if (!is_numeric($id))
            return false;
        switch ($actionfor) {
            case'company':
                $table = 'wj_portal_companies';
                break;
            case'job':
                $table = 'wj_portal_jobs';
                break;
            case'resume':
                $table = 'wj_portal_resume';
                break;
        }
        $query = "SELECT uid FROM `" . wpjobportal::$_db->prefix . $table . "`WHERE id = " . esc_sql($id);
        $result = wpjobportaldb::get_var($query);

        return $result;
    }

    public function makeFilterdOrEditedTagsToReturn($tags) {
        if (empty($tags))
            return null;
        $temparray = wpjobportalphplib::wpJP_explode(',', $tags);
        $array = array();
        for ($i = 0; $i < count($temparray); $i++) {
            $array[] = array('id' => $temparray[$i], 'name' => $temparray[$i]);
        }
        return wp_json_encode($array);
    }

    function saveNewInWPJOBPORTAL($data) {
        if (empty($data))
            return false;

        $allow_reg_as_emp = wpjobportal::$_config->getConfigurationByConfigName('showemployerlink');
        if($allow_reg_as_emp != 1){
            $data['roleid '] = 2;
        }
        if(isset($data['socialmedia']) && !empty($data['socialid'])){
            $data['uid'] = "";
            $data['socialmedia'] = $data['socialmedia'];
        } else {
            $currentuser = get_userdata(get_current_user_id());
            $data['socialid'] = '';
            $data['socialmedia'] = '';
            $data['first_name'] = $currentuser->first_name;
            $data['last_name'] = $currentuser->last_name;
            $data['emailaddress'] = $currentuser->user_email;
            $data['uid'] = $currentuser->ID;
        }
     
        $row = WPJOBPORTALincluder::getJSTable('users');
        $data['status'] = 1; // all user autoapprove when registered as WP Job Portal users
        $data['created'] = gmdate('Y-m-d H:i:s');
        $data = wpjobportal::wpjobportal_sanitizeData($data);
        if (!$row->bind($data)) {
            return WPJOBPORTAL_SAVE_ERROR;
        }
        if (!$row->check()) {
            return WPJOBPORTAL_SAVE_ERROR;
        }
        if (!$row->store()) {
            return WPJOBPORTAL_SAVE_ERROR;
        }

	if (isset($_COOKIE['first_name'])){
		wpjobportalphplib::wpJP_setcookie('first_name' , '' , time() + 0 , COOKIEPATH);
		if ( SITECOOKIEPATH != COOKIEPATH ){
		wpjobportalphplib::wpJP_setcookie('first_name' , '' , time() + 0 , SITECOOKIEPATH);
		}
	}
	if (isset($_COOKIE['last_name'])){
		wpjobportalphplib::wpJP_setcookie('last_name' , '', time() + 0 , COOKIEPATH);
		if ( SITECOOKIEPATH != COOKIEPATH ){
		wpjobportalphplib::wpJP_setcookie('last_name' , '', time() + 0 , SITECOOKIEPATH);
		}
	}
	if (isset($_COOKIE['email'])){
		wpjobportalphplib::wpJP_setcookie('email' , '', time() + 0 , COOKIEPATH);
		if ( SITECOOKIEPATH != COOKIEPATH ){
		wpjobportalphplib::wpJP_setcookie('email' , '', time() + 0 , SITECOOKIEPATH);
		}
	}
        return WPJOBPORTAL_SAVED;
    }

    function parseID($id){
        if(is_numeric($id)) return $id;
        // php 8 issue explod function
        if($id == ''){
            return $id;
        }
        $id = wpjobportalphplib::wpJP_explode('-', $id);
        $id = $id[count($id) -1];
        return $id;
    }

    function sendEmail($recevierEmail, $subject, $body, $senderEmail, $senderName, $attachments = '') {
        if (!$senderName)
            $senderName = wpjobportal::$_configuration['title'];
        $headers = 'From: ' . $senderName . ' <' . $senderEmail . '>' . "\r\n";
        add_filter('wp_mail_content_type', function(){return "text/html";});
        $body = wpjobportalphplib::wpJP_preg_replace('/\r?\n|\r/', '<br/>', $body);
        $body = wpjobportalphplib::wpJP_str_replace(array("\r\n", "\r", "\n"), "<br/>", $body);
        $body = nl2br($body);
        $result = wp_mail($recevierEmail, $subject, $body, $headers, $attachments);
        return $result;
    }

    function jsMakeRedirectURL($module, $layout, $for, $cpfor = null){
        if(empty($module) AND empty($layout) AND empty($for))
            return null;

        $finalurl = '';
        if( $for == 1 ){ // login links
            $jsthisurl = wpjobportal::wpjobportal_makeUrl(array('wpjobportalme'=>$module, 'wpjobportallt'=>$layout));
            $jsthisurl = wpjobportalphplib::wpJP_safe_encoding($jsthisurl);
            $finalurl = wpjobportal::wpjobportal_makeUrl(array('wpjobportalme'=>'wpjobportal', 'wpjobportallt'=>'login', 'wpjobportalredirecturl'=>$jsthisurl));
        }

        return $finalurl;
    }

    function getCitiesForFilter($cities){
        if(empty($cities))
            return NULL;


        $cities = wpjobportalphplib::wpJP_explode(',', $cities);
        $result = array();

        $defaultaddressdisplaytype = wpjobportal::$_config->getConfigurationByConfigName('defaultaddressdisplaytype');

        foreach ($cities as $city) {
            if(!is_numeric($city)){
                continue;
            }
            $query = "SELECT city.id AS id, CONCAT(city.name";
            switch ($defaultaddressdisplaytype) {
                case 'csc'://City, State, Country
                    $query .= " ,', ', (IF(state.name is not null,state.name,'')),IF(state.name is not null,', ',''),country.name)";
                    break;
                case 'cs'://City, State
                    $query .= " ,', ', (IF(state.name is not null,state.name,'')))";
                    break;
                case 'cc'://City, Country
                    $query .= " ,', ', country.name)";
                    break;
                case 'c'://city by default select for each case
                    $query .= ")";
                    break;
            }
            $query .= " AS name ";
            $query .= " FROM `".wpjobportal::$_db->prefix."wj_portal_cities` AS city
                        JOIN `".wpjobportal::$_db->prefix."wj_portal_countries` AS country on city.countryid=country.id
                        LEFT JOIN `".wpjobportal::$_db->prefix."wj_portal_states` AS state on city.stateid=state.id
                        WHERE country.enabled = 1 AND city.enabled = 1";
            $query .= " AND city.id =".esc_sql($city);


            $result[] = wpjobportaldb::get_row($query);
        }
        if(!empty($result)){
            return wp_json_encode($result);
        }else{
            return NULL;
        }
    }
    function getMessagekey(){
        $key = 'common';if(wpjobportal::$_common->wpjp_isadmin()){$key = 'admin_'.$key;}return $key;
    }

    function stripslashesFull($input){// testing this function/.
        if($input == ''){
            return $input;
        }
        if (is_array($input)) {
            $input = array_map(array($this,'stripslashesFull'), $input);
        } elseif (is_object($input)) {
            $vars = get_object_vars($input);
            foreach ($vars as $k=>$v) {
                $input->{$k} = stripslashesFull($v);
            }
        } else {
            $input = wpjobportalphplib::wpJP_stripslashes($input);
        }
        return $input;
    }

    function validateEmployerArea(){
        // first handle visitor case to show appropriate message to visitor
        $cuser = WPJOBPORTALincluder::getObjectClass('user');
        if($cuser->isguest()){
            $module = WPJOBPORTALrequest::getVar('wpjobportalme');
            $layout = WPJOBPORTALrequest::getLayout('wpjobportallt',null,'');
            $link = WPJOBPORTALincluder::getJSModel('common')->jsMakeRedirectURL($module, $layout, 1);
            $linktext = esc_html(__('Login','wp-job-portal'));
            throw new Exception( wp_kses(WPJOBPORTALLayout::setMessageFor(1 , $link , $linktext,1),WPJOBPORTAL_ALLOWED_TAGS) );
        }
        $employerAreaEnabled = wpjobportal::$_config->getConfigValue('disable_employer');
        if(!$employerAreaEnabled){
            throw new Exception( wp_kses(WPJOBPORTALLayout::setMessageFor(5,null,null,1),WPJOBPORTAL_ALLOWED_TAGS) );
        }
        if(!$cuser->isemployer()){
            if($cuser->isjobseeker()){
               throw new Exception( wp_kses(WPJOBPORTALLayout::setMessageFor(2,null,null,1),WPJOBPORTAL_ALLOWED_TAGS) );
            }
            if(!$cuser->isWPJOBPortalUser()){
                $link = wpjobportal::wpjobportal_makeUrl(array('wpjobportalme'=>'common', 'wpjobportallt'=>'newinwpjobportal'));
                $linktext = esc_html(__('Select role','wp-job-portal'));
                throw new Exception( wp_kses(WPJOBPORTALLayout::setMessageFor(9 , $link , $linktext,1),WPJOBPORTAL_ALLOWED_TAGS) );
            }
        }
    }

    function getMessagesForAddMore($module){
        $linktext = esc_html(__('You are Not Allowed To Add More than One','wp-job-portal').'&nbsp;'.wpjobportal::wpjobportal_getVariableValue($module).' !'. __('Contact TO Adminstrator', 'wp-job-portal'));
        wpjobportal::$_error_flag = true;
        throw new Exception(wp_kses(WPJOBPORTALLayout::setMessageFor(16,'',$module,1),WPJOBPORTAL_ALLOWED_TAGS));
    }

    function getBuyErrMsg(){
        $link = wpjobportal::wpjobportal_makeUrl(array('wpjobportalme'=>'package', 'wpjobportallt'=>'packages'));
        $linktext = esc_html(__('Buy Package', 'wp-job-portal'));
        wpjobportal::$_error_flag = true;
        wpjobportal::$_error_flag_message_for=15;
        throw new Exception(wp_kses(WPJOBPORTALLayout::setMessageFor(15,$link,$linktext,1),WPJOBPORTAL_ALLOWED_TAGS));
    }


    function getCalendarDateFormat(){
        static $js_scriptdateformat;
        if ($js_scriptdateformat) {
            return $js_scriptdateformat;
        }
        if (wpjobportal::$_configuration['date_format'] == 'm/d/Y' || wpjobportal::$_configuration['date_format'] == 'd/m/y' || wpjobportal::$_configuration['date_format'] == 'm/d/y' || wpjobportal::$_configuration['date_format'] == 'd/m/Y') {
            $dash = '/';
        } else {
            $dash = '-';
        }
        $dateformat = wpjobportal::$_configuration['date_format'];
        $firstdash = wpjobportalphplib::wpJP_strpos($dateformat, $dash, 0);
        $firstvalue = wpjobportalphplib::wpJP_substr($dateformat, 0, $firstdash);
        $firstdash = $firstdash + 1;
        $seconddash = wpjobportalphplib::wpJP_strpos($dateformat, $dash, $firstdash);
        $secondvalue = wpjobportalphplib::wpJP_substr($dateformat, $firstdash, $seconddash - $firstdash);
        $seconddash = $seconddash + 1;
        $thirdvalue = wpjobportalphplib::wpJP_substr($dateformat, $seconddash, wpjobportalphplib::wpJP_strlen($dateformat) - $seconddash);
        $js_dateformat = '%' . $firstvalue . $dash . '%' . $secondvalue . $dash . '%' . $thirdvalue;
        $js_scriptdateformat = $firstvalue . $dash . $secondvalue . $dash . $thirdvalue;
        $js_scriptdateformat = wpjobportalphplib::wpJP_str_replace('Y', 'yy', $js_scriptdateformat);
        return $js_scriptdateformat;
    }

    function getProductDesc($id){
        $name = '';
        $parse = wpjobportalphplib::wpJP_explode('-', $id);
        $moduleid = $parse[1];
        $configname = $parse[0];
        if(is_array($parse) && !empty($parse)){
            if(!empty($id)){
                switch ($configname) {
                    case 'job_currency_department_perlisting':
                        //print_r(WPJOBPORTALincluder::getJSModel('departments')->getDepartmentById($moduleid));
                        break;
                    case 'company_price_perlisting':
                        break;
                    case 'company_feature_price_perlisting':
                        break;
                    case 'job_currency_price_perlisting':
                        break;
                    case 'jobs_feature_price_perlisting':
                        break;
                    case 'job_resume_price_perlisting':
                        break;
                    case 'job_featureresume_price_perlisting':
                        break;
                    case 'job_jobalert_price_perlisting':
                        break;
                    case 'job_resumesavesearch_price_perlisting':
                        $name = WPJOBPORTALincluder::getJSModel('resumesearch')->getResumeSearchName($moduleid);
                        # Resume Search Payment
                        break;
                   default:
                        # code...
                        break;
                }
                return $name;
            }
        }
    }

    function listModuleJobsStats($classname, $title, $showtitle, $employers, $jobseekers, $jobs, $companies, $activejobs, $resumes, $todaystats,$data){
        $my_html = '
            <div id="wpjobportals_mod_wrapper" class="wjportal-stats-mod"> ';
		$my_html .= '<div id="wpjobportals-mod-heading" class="wjportal-mod-heading"> ' . esc_html(__('Stats', 'wp-job-portal')) . '</div>';

        $my_html .='
                <div id="wpjobportals-data-wrapper" class="' . $classname . ' wjportal-stats">';
        $curdate = gmdate('Y-m-d');
        if ($employers == 1) {
            $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Employer', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['employer'] . ')</span></div>';
        }
        if ($jobseekers == 1) {
            $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Job seeker', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['jobseeker'] . ')</span></div>';
        }
        if ($jobs == 1) {
            $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Jobs', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['totaljobs'] . ')</span></div>';
        }
        if ($companies == 1) {
            $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Companies', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['totalcompanies'] . ')</span></div>';
        }
        if ($activejobs == 1) {
            $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Active Jobs', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['tatalactivejobs'] . ')</span></div>';
        }
        if ($resumes == 1) {
            $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Resume', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['totalresume'] . ')</span></div>';
        }
        if ($todaystats == 1) {
			$my_html .= '</div> <div id="wpjobportals-mod-heading" class="wjportal-mod-heading"> ' . esc_html(__('Today Stats', 'wp-job-portal')) . '</div>';
            $my_html .='
                <div id="wpjobportals-data-wrapper" class="' . $classname . ' wjportal-stats">';
            if ($employers == 1) {
                $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Employer', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['todyemployer'] . ')</span></div>';
            }
            if ($jobseekers == 1) {
                $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Job seeker', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['todyjobseeker'] . ')</span></div>';
            }
            if ($jobs == 1) {
                $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Jobs', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['todayjobs'] . ')</span></div>';
            }
            if ($companies == 1) {
                $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Companies', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['todaycompanies'] . ')</span></div>';
            }
            if ($activejobs == 1) {
                $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Active Jobs', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['todayactivejobs'] . ')</span></div>';
            }
            if ($resumes == 1) {
                $my_html .='<div class="wpjobportals-value wjportal-stats-data">' . esc_html(__('Resume', 'wp-job-portal')) . ' <span class="wjportal-stats-num">(' . $data['todayresume'] . ')</span></div>';
            }
            $my_html .= '</div>';
        }

        $my_html .= '</div>';
        return $my_html;
    }

    function getSearchFormDataOnlySort($jstlay){
        if($jstlay == 'activitylog'){
            $val1 = 4;
        }else{
            $val1 = 6;
        }
        $jsjp_search_array = array();
        $jsjp_search_array['sorton'] = WPJOBPORTALrequest::getVar('sorton', 'post', $val1);
        $jsjp_search_array['sortby'] = WPJOBPORTALrequest::getVar('sortby', 'post', 2);
        $jsjp_search_array['search_from_myapply_myjobs'] = 1;
        return $jsjp_search_array;
    }

    function getCookiesSavedOnlySortandOrder(){
        $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_myapply_myjobs']) && $wpjp_search_cookie_data['search_from_myapply_myjobs'] == 1){
            $jsjp_search_array['sorton'] = $wpjp_search_cookie_data['sorton'];
            $jsjp_search_array['sortby'] = $wpjp_search_cookie_data['sortby'];
        }
        return $jsjp_search_array;
    }

    function setSearchVariableOnlySortandOrder($jsjp_search_array,$jstlay){
        if($jstlay == 'activitylog'){
            $val1 = 4;
        }else{
            $val1 = 6;
        }
        wpjobportal::$_search['jobs']['sorton'] = isset($jsjp_search_array['sorton']) ? $jsjp_search_array['sorton'] : $val1;
        wpjobportal::$_search['jobs']['sortby'] = isset($jsjp_search_array['sortby']) ? $jsjp_search_array['sortby'] : 2;
    }

    function getServerProtocol(){
        static $protocol;
        if ($protocol) {
            return $protocol;
        }
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        return $protocol;
    }

    function wpjp_isadmin(){
        if (current_user_can('manage_options')) {
            return true;
        } else {
            return false;
        }
    }

    function getSearchFormDataAdmin(){
        $jsjp_search_array = array();
        $jsjp_search_array['departmentname'] = WPJOBPORTALrequest::getVar('departmentname','','');
        $jsjp_search_array['companyname'] = WPJOBPORTALrequest::getVar('companyname','','');
        $jsjp_search_array['status'] = WPJOBPORTALrequest::getVar('status','','');

        $jsjp_search_array['title'] = WPJOBPORTALrequest::getVar('title','','');
        $jsjp_search_array['name'] = WPJOBPORTALrequest::getVar('name','','');

        if($jsjp_search_array['title'] == ''){// to handle job applied resume case
            $jsjp_search_array['title'] = WPJOBPORTALrequest::getVar('application_title','','');
        }
        if($jsjp_search_array['name'] == ''){// to handle job applied resume case
            $jsjp_search_array['name'] = WPJOBPORTALrequest::getVar('applicantname','','');
        }


        $jsjp_search_array['ustatus'] = WPJOBPORTALrequest::getVar('ustatus','','');
        $jsjp_search_array['vstatus'] = WPJOBPORTALrequest::getVar('vstatus','','');
        $jsjp_search_array['required'] = WPJOBPORTALrequest::getVar('required','','');

        $jsjp_search_array['nationality'] = WPJOBPORTALrequest::getVar('nationality','','');
        $jsjp_search_array['jobcategory'] = WPJOBPORTALrequest::getVar('jobcategory','','');
        $jsjp_search_array['gender'] = WPJOBPORTALrequest::getVar('gender','','');
        $jsjp_search_array['jobtype'] = WPJOBPORTALrequest::getVar('jobtype','','');
        $jsjp_search_array['currency'] = WPJOBPORTALrequest::getVar('currency','','');
        $jsjp_search_array['jobsalaryrange'] = WPJOBPORTALrequest::getVar('jobsalaryrange','','');
        $jsjp_search_array['heighestfinisheducation'] = WPJOBPORTALrequest::getVar('heighestfinisheducation','','');

        $jsjp_search_array['coverlettertitle'] = WPJOBPORTALrequest::getVar('coverlettertitle','','');

        $jsjp_search_array['username'] = WPJOBPORTALrequest::getVar('username','','');
        //$jsjp_search_array['status'] = WPJOBPORTALrequest::getVar('status','','');
        $jsjp_search_array['currencyid'] = WPJOBPORTALrequest::getVar('currencyid','','');
        $jsjp_search_array['type'] = WPJOBPORTALrequest::getVar('type','','');


        $jsjp_search_array['foldername'] = WPJOBPORTALrequest::getVar('foldername','','');

        $jsjp_search_array['searchcompany'] = WPJOBPORTALrequest::getVar('searchcompany','','');
        $jsjp_search_array['searchcompcategory'] = WPJOBPORTALrequest::getVar('searchcompcategory','','');

        //$jsjp_search_array['searchcompany'] = WPJOBPORTALrequest::getVar('searchcompany','','');
        $jsjp_search_array['searchjobcategory'] = WPJOBPORTALrequest::getVar('searchjobcategory','','');
        $jsjp_search_array['datestart'] = WPJOBPORTALrequest::getVar('datestart','','');
        $jsjp_search_array['dateend'] = WPJOBPORTALrequest::getVar('dateend','','');
        $jsjp_search_array['featured'] = WPJOBPORTALrequest::getVar('featured','','');

        $jsjp_search_array['wpjobportal_city'] = WPJOBPORTALrequest::getVar('wpjobportal-city','','');
        $jsjp_search_array['wpjobportal_company'] = WPJOBPORTALrequest::getVar('wpjobportal-company','','');

        $jsjp_search_array['jobseeker'] = WPJOBPORTALrequest::getVar('jobseeker','','');
        $jsjp_search_array['employer'] = WPJOBPORTALrequest::getVar('employer','','');
        $jsjp_search_array['read'] = WPJOBPORTALrequest::getVar('read','','');
        $jsjp_search_array['company'] = WPJOBPORTALrequest::getVar('company','','');
        $jsjp_search_array['searchjobtitle'] = WPJOBPORTALrequest::getVar('searchjobtitle','','');
        $jsjp_search_array['searchresumetitle'] = WPJOBPORTALrequest::getVar('searchresumetitle','','');
        $jsjp_search_array['resumetitle'] = WPJOBPORTALrequest::getVar('resumetitle','','');
        $jsjp_search_array['jobtitle'] = WPJOBPORTALrequest::getVar('jobtitle','','');
        $jsjp_search_array['subject'] = WPJOBPORTALrequest::getVar('subject','','');
        $jsjp_search_array['searchsubject'] = WPJOBPORTALrequest::getVar('searchsubject','','');
        $jsjp_search_array['conflicted'] = WPJOBPORTALrequest::getVar('conflicted','','');

        //$jsjp_search_array['title'] = WPJOBPORTALrequest::getVar('title','','');
        $jsjp_search_array['email'] = WPJOBPORTALrequest::getVar('email','','');
        $jsjp_search_array['location'] = WPJOBPORTALrequest::getVar('location','','');
        $jsjp_search_array['category'] = WPJOBPORTALrequest::getVar('category','','');
        $jsjp_search_array['alertstatus'] = WPJOBPORTALrequest::getVar('alertstatus','','');
        //$jsjp_search_array['status'] = WPJOBPORTALrequest::getVar('status','','');

        $jsjp_search_array['searchname'] = WPJOBPORTALrequest::getVar('searchname','','');

        $jsjp_search_array['sorton'] = WPJOBPORTALrequest::getVar('sorton','',3);
        $jsjp_search_array['sortby'] = WPJOBPORTALrequest::getVar('sortby','',2);

        // job applied resume layout
        // $jsjp_search_array['application_title'] = WPJOBPORTALrequest::getVar('application_title','','');
        // $jsjp_search_array['applicantname'] = WPJOBPORTALrequest::getVar('applicantname','','');


        $jsjp_search_array['search_from_admin_listing'] = 1;
        return $jsjp_search_array;
    }

    function getCookiesSavedAdmin(){
        $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_admin_listing']) && $wpjp_search_cookie_data['search_from_admin_listing'] == 1){
            $jsjp_search_array['departmentname'] = $wpjp_search_cookie_data['departmentname'];
            $jsjp_search_array['companyname'] = $wpjp_search_cookie_data['companyname'];
            $jsjp_search_array['status'] = $wpjp_search_cookie_data['status'];

            $jsjp_search_array['title'] = $wpjp_search_cookie_data['title'];
            $jsjp_search_array['ustatus'] = $wpjp_search_cookie_data['ustatus'];
            $jsjp_search_array['vstatus'] = $wpjp_search_cookie_data['vstatus'];
            $jsjp_search_array['required'] = $wpjp_search_cookie_data['required'];

            //$jsjp_search_array['title'] = $wpjp_search_cookie_data['title'];
            $jsjp_search_array['name'] = $wpjp_search_cookie_data['name'];
            $jsjp_search_array['nationality'] = $wpjp_search_cookie_data['nationality'];
            $jsjp_search_array['jobcategory'] = $wpjp_search_cookie_data['jobcategory'];
            $jsjp_search_array['gender'] = $wpjp_search_cookie_data['gender'];
            $jsjp_search_array['jobtype'] = $wpjp_search_cookie_data['jobtype'];
            $jsjp_search_array['currency'] = $wpjp_search_cookie_data['currency'];
            $jsjp_search_array['jobsalaryrange'] = $wpjp_search_cookie_data['jobsalaryrange'];
            $jsjp_search_array['heighestfinisheducation'] = $wpjp_search_cookie_data['heighestfinisheducation'];

            $jsjp_search_array['coverlettertitle'] = $wpjp_search_cookie_data['coverlettertitle'];
            //$jsjp_search_array['status'] = $wpjp_search_cookie_data['status'];

            $jsjp_search_array['username'] = $wpjp_search_cookie_data['username'];
            //$jsjp_search_array['status'] = $wpjp_search_cookie_data['status'];
            $jsjp_search_array['currencyid'] = $wpjp_search_cookie_data['currencyid'];
            $jsjp_search_array['type'] = $wpjp_search_cookie_data['type'];


            $jsjp_search_array['foldername'] = $wpjp_search_cookie_data['foldername'];

            $jsjp_search_array['searchcompany'] = $wpjp_search_cookie_data['searchcompany'];
            $jsjp_search_array['searchcompcategory'] = $wpjp_search_cookie_data['searchcompcategory'];
            $jsjp_search_array['wpjobportal_city'] = $wpjp_search_cookie_data['wpjobportal_city'];

            //$jsjp_search_array['searchcompany'] = $wpjp_search_cookie_data['searchcompany'];
            $jsjp_search_array['searchjobcategory'] = $wpjp_search_cookie_data['searchjobcategory'];
            $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['wpjobportal_company'] = $wpjp_search_cookie_data['wpjobportal_company'];

            $jsjp_search_array['jobseeker'] = $wpjp_search_cookie_data['jobseeker'];
            $jsjp_search_array['employer'] = $wpjp_search_cookie_data['employer'];
            $jsjp_search_array['read'] = $wpjp_search_cookie_data['read'];
            $jsjp_search_array['company'] = $wpjp_search_cookie_data['company'];
            $jsjp_search_array['jobtitle'] = $wpjp_search_cookie_data['jobtitle'];
            $jsjp_search_array['resumetitle'] = $wpjp_search_cookie_data['resumetitle'];
            $jsjp_search_array['subject'] = $wpjp_search_cookie_data['subject'];
            $jsjp_search_array['conflicted'] = $wpjp_search_cookie_data['conflicted'];

            $jsjp_search_array['searchjobtitle'] = $wpjp_search_cookie_data['searchjobtitle'];
            $jsjp_search_array['searchresumetitle'] = $wpjp_search_cookie_data['searchresumetitle'];
            $jsjp_search_array['searchsubject'] = $wpjp_search_cookie_data['searchsubject'];

            //$jsjp_search_array['title'] = $wpjp_search_cookie_data['title'];
            $jsjp_search_array['email'] = $wpjp_search_cookie_data['email'];
            $jsjp_search_array['location'] = $wpjp_search_cookie_data['location'];
            $jsjp_search_array['category'] = $wpjp_search_cookie_data['category'];
            $jsjp_search_array['alertstatus'] = $wpjp_search_cookie_data['alertstatus'];
            //$jsjp_search_array['status'] = $wpjp_search_cookie_data['status'];

            $jsjp_search_array['searchname'] = $wpjp_search_cookie_data['searchname'];


            // $jsjp_search_array['application_title'] = $wpjp_search_cookie_data['application_title'];
            // $jsjp_search_array['applicantname'] = $wpjp_search_cookie_data['applicantname'];


            $jsjp_search_array['sorton'] = $wpjp_search_cookie_data['sorton'];
            $jsjp_search_array['sortby'] = $wpjp_search_cookie_data['sortby'];
        }
        return $jsjp_search_array;
    }

    function setSearchVariableAdmin($jsjp_search_array){
        wpjobportal::$_search['search_filter']['departmentname'] = isset($jsjp_search_array['departmentname']) ? $jsjp_search_array['departmentname'] : null;
        wpjobportal::$_search['search_filter']['companyname'] = isset($jsjp_search_array['companyname']) ? $jsjp_search_array['companyname'] : null;
        wpjobportal::$_search['search_filter']['status'] = isset($jsjp_search_array['status']) ? $jsjp_search_array['status'] : null;

        wpjobportal::$_search['search_filter']['title'] = isset($jsjp_search_array['title']) ? $jsjp_search_array['title'] : null;
        wpjobportal::$_search['search_filter']['ustatus'] = isset($jsjp_search_array['ustatus']) ? $jsjp_search_array['ustatus'] : null;
        wpjobportal::$_search['search_filter']['vstatus'] = isset($jsjp_search_array['vstatus']) ? $jsjp_search_array['vstatus'] : null;
        wpjobportal::$_search['search_filter']['required'] = isset($jsjp_search_array['required']) ? $jsjp_search_array['required'] : null;

        //wpjobportal::$_search['search_filter']['title'] = isset($jsjp_search_array['title']) ? $jsjp_search_array['title'] : null;
        wpjobportal::$_search['search_filter']['name'] = isset($jsjp_search_array['name']) ? $jsjp_search_array['name'] : null;
        wpjobportal::$_search['search_filter']['nationality'] = isset($jsjp_search_array['nationality']) ? $jsjp_search_array['nationality'] : null;
        wpjobportal::$_search['search_filter']['jobcategory'] = isset($jsjp_search_array['jobcategory']) ? $jsjp_search_array['jobcategory'] : null;
        wpjobportal::$_search['search_filter']['gender'] = isset($jsjp_search_array['gender']) ? $jsjp_search_array['gender'] : null;
        wpjobportal::$_search['search_filter']['jobtype'] = isset($jsjp_search_array['jobtype']) ? $jsjp_search_array['jobtype'] : null;
        wpjobportal::$_search['search_filter']['currency'] = isset($jsjp_search_array['currency']) ? $jsjp_search_array['currency'] : null;
        wpjobportal::$_search['search_filter']['jobsalaryrange'] = isset($jsjp_search_array['jobsalaryrange']) ? $jsjp_search_array['jobsalaryrange'] : null;
        wpjobportal::$_search['search_filter']['heighestfinisheducation'] = isset($jsjp_search_array['heighestfinisheducation']) ? $jsjp_search_array['heighestfinisheducation'] : null;

        wpjobportal::$_search['search_filter']['coverlettertitle'] = isset($jsjp_search_array['coverlettertitle']) ? $jsjp_search_array['coverlettertitle'] : null;
        //wpjobportal::$_search['search_filter']['status'] = isset($jsjp_search_array['status']) ? $jsjp_search_array['status'] : null;

        wpjobportal::$_search['search_filter']['username'] = isset($jsjp_search_array['username']) ? $jsjp_search_array['username'] : null;
        // wpjobportal::$_search['search_filter']['status'] = isset($jsjp_search_array['status']) ? $jsjp_search_array['status'] : null;
        wpjobportal::$_search['search_filter']['currencyid'] = isset($jsjp_search_array['currencyid']) ? $jsjp_search_array['currencyid'] : null;
        wpjobportal::$_search['search_filter']['type'] = isset($jsjp_search_array['type']) ? $jsjp_search_array['type'] : null;

        wpjobportal::$_search['search_filter']['name'] = isset($jsjp_search_array['name']) ? $jsjp_search_array['name'] : null;
        wpjobportal::$_search['search_filter']['foldername'] = isset($jsjp_search_array['foldername']) ? $jsjp_search_array['foldername'] : null;

        wpjobportal::$_search['search_filter']['searchcompany'] = isset($jsjp_search_array['searchcompany']) ? $jsjp_search_array['searchcompany'] : null;
        wpjobportal::$_search['search_filter']['searchcompcategory'] = isset($jsjp_search_array['searchcompcategory']) ? $jsjp_search_array['searchcompcategory'] : null;
        wpjobportal::$_search['search_filter']['wpjobportal_city'] = isset($jsjp_search_array['wpjobportal_city']) ? $jsjp_search_array['wpjobportal_city'] : null;

        //wpjobportal::$_search['search_filter']['searchcompany'] = isset($jsjp_search_array['searchcompany']) ? $jsjp_search_array['searchcompany'] : null;
        wpjobportal::$_search['search_filter']['searchjobcategory'] = isset($jsjp_search_array['searchjobcategory']) ? $jsjp_search_array['searchjobcategory'] : null;
        wpjobportal::$_search['search_filter']['datestart'] = isset($jsjp_search_array['datestart']) ? $jsjp_search_array['datestart'] : null;
        wpjobportal::$_search['search_filter']['dateend'] = isset($jsjp_search_array['dateend']) ? $jsjp_search_array['dateend'] : null;
        wpjobportal::$_search['search_filter']['featured'] = isset($jsjp_search_array['featured']) ? $jsjp_search_array['featured'] : null;

        wpjobportal::$_search['search_filter']['wpjobportal_company'] = isset($jsjp_search_array['wpjobportal_company']) ? $jsjp_search_array['wpjobportal_company'] : null;

        wpjobportal::$_search['search_filter']['jobseeker'] = isset($jsjp_search_array['jobseeker']) ? $jsjp_search_array['jobseeker'] : null;
        wpjobportal::$_search['search_filter']['employer'] = isset($jsjp_search_array['employer']) ? $jsjp_search_array['employer'] : null;
        wpjobportal::$_search['search_filter']['read'] = isset($jsjp_search_array['read']) ? $jsjp_search_array['read'] : null;
        wpjobportal::$_search['search_filter']['company'] = isset($jsjp_search_array['company']) ? $jsjp_search_array['company'] : null;
        wpjobportal::$_search['search_filter']['jobtitle'] = isset($jsjp_search_array['jobtitle']) ? $jsjp_search_array['jobtitle'] : null;
        wpjobportal::$_search['search_filter']['resumetitle'] = isset($jsjp_search_array['resumetitle']) ? $jsjp_search_array['resumetitle'] : null;
        wpjobportal::$_search['search_filter']['subject'] = isset($jsjp_search_array['subject']) ? $jsjp_search_array['subject'] : null;
        wpjobportal::$_search['search_filter']['conflicted'] = isset($jsjp_search_array['conflicted']) ? $jsjp_search_array['conflicted'] : null;

        wpjobportal::$_search['search_filter']['searchjobtitle'] = isset($jsjp_search_array['searchjobtitle']) ? $jsjp_search_array['searchjobtitle'] : null;
        wpjobportal::$_search['search_filter']['searchresumetitle'] = isset($jsjp_search_array['searchresumetitle']) ? $jsjp_search_array['searchresumetitle'] : null;
        wpjobportal::$_search['search_filter']['searchsubject'] = isset($jsjp_search_array['searchsubject']) ? $jsjp_search_array['searchsubject'] : null;

        //wpjobportal::$_search['search_filter']['title'] = isset($jsjp_search_array['title']) ? $jsjp_search_array['title'] : null;
        wpjobportal::$_search['search_filter']['email'] = isset($jsjp_search_array['email']) ? $jsjp_search_array['email'] : null;
        wpjobportal::$_search['search_filter']['location'] = isset($jsjp_search_array['location']) ? $jsjp_search_array['location'] : null;
        wpjobportal::$_search['search_filter']['category'] = isset($jsjp_search_array['category']) ? $jsjp_search_array['category'] : null;
        wpjobportal::$_search['search_filter']['alertstatus'] = isset($jsjp_search_array['alertstatus']) ? $jsjp_search_array['alertstatus'] : null;
        //wpjobportal::$_search['search_filter']['status'] = isset($jsjp_search_array['status']) ? $jsjp_search_array['status'] : null;

        wpjobportal::$_search['search_filter']['searchname'] = isset($jsjp_search_array['searchname']) ? $jsjp_search_array['searchname'] : null;

        wpjobportal::$_search['search_filter']['application_title'] = isset($jsjp_search_array['application_title']) ? $jsjp_search_array['application_title'] : null;
        wpjobportal::$_search['search_filter']['applicantname'] = isset($jsjp_search_array['applicantname']) ? $jsjp_search_array['applicantname'] : null;

        wpjobportal::$_search['search_filter']['sorton'] = isset($jsjp_search_array['sorton']) ? $jsjp_search_array['sorton'] : null;
        wpjobportal::$_search['search_filter']['sortby'] = isset($jsjp_search_array['sortby']) ? $jsjp_search_array['sortby'] : null;
    }

    function getDefaultImage($role){
        // job seeker deafult image
        if(WPJOBPORTALincluder::getJSModel('common')->isElegantDesignEnabled()){
            $url = ELEGANTDESIGN_PLUGIN_URL;
        } else {
            $url = WPJOBPORTAL_PLUGIN_URL;
        }
        $img_path = esc_url($url) . "includes/images/users.png";

        // employer default image
        if($role == 'employer'){
            $img_path = esc_url(WPJOBPORTAL_PLUGIN_URL) . "includes/images/default_logo.png";
        }

        // admin set image
        if(!empty(wpjobportal::$_configuration['default_image'])){
            $data_directory = wpjobportal::$_config->getConfigurationByConfigName('data_directory');
            $wpdir = wp_upload_dir();
            $img_path = $wpdir['baseurl'] . '/' . $data_directory . '/data/default_image/' . wpjobportal::$_configuration['default_image'];
        }

        return $img_path;
    }

    function addWPSEOHooks($module_name,$file_name){
        $this->module_name = $module_name;
        $this->file_name = $file_name;
        add_filter( 'pre_get_document_title', array($this, 'WPJobPortalGetDocumentTitle'),99);
        //add_action("wp_head", array($this, "WPJobPortalMetaTags"));
    }

    function WPJobPortalGetDocumentTitle($title) {
        $module = $this->module_name;
        $layout = $this->file_name;
        // making sure our layout is being opened & making sure proper values are set
        if ($module != '' && $layout != '') {
            // get page title for current page
            $page_title = $this->getWPJobPortalDocumentTitleByPage($module, $layout);
            if($page_title != ''){
                $title = $page_title;
            }
        }
        return $title;
    }

    function getWPJobPortalDocumentTitleByPage($module='',$layout=''){
        if($module=='' && $layout==''){
            $layout = WPJOBPORTALrequest::getVar('wpjobportallt');
            $module = WPJOBPORTALrequest::getVar('wpjobportalme');
        }
        $title = '';
        if ($module != '' && $layout != '') {
            $title = $this->getPageTitleByFileName($layout,$module);
        }
        return $title;
    }

    function getPageTitleByFileName($layout,$module) {
        $page_title_val = '';
        $where_query = '';
        if($layout == 'controlpanel' || $layout == 'mystats'){
            $where_query = " AND modulename = '".esc_sql($module)."'";
        }

        $query = "SELECT pagetitle FROM `".wpjobportal::$_db->prefix."wj_portal_slug` WHERE filename = '".esc_sql($layout)."' ".$where_query;
        $page_title_val = wpjobportal::$_db->get_var($query);
        if($page_title_val != ''){
            // using switch to handle different layouts seprately
            switch ($layout) {
                case 'viewcompany':
                    $companyid = isset(wpjobportal::$_data[0]->id) ? wpjobportal::$_data[0]->id : '';
                    if($companyid == ''){
                        $companyid = WPJOBPORTALrequest::getVar('wpjobportalid');
                        $companyid = wpjobportal::$_common->parseID($companyid);
                    }
                    if(is_numeric($companyid) && $companyid > 0){
                        // below code is only here until the interface is not built properly
                        $company_title_options = get_option('wpjobportal_company_document_title_settings');
                        if(!empty($company_title_options)){
                            $page_title_val = $company_title_options;
                        }

                        $page_title_val = WPJOBPORTALincluder::getJSModel('company')->makeCompanySeoDocumentTitle($page_title_val , $companyid);
                    }
                break;
                case 'viewjob':
                    $jobid = isset(wpjobportal::$_data[0]->id) ? wpjobportal::$_data[0]->id : '';
                    if($jobid == ''){
                        $jobid = WPJOBPORTALrequest::getVar('wpjobportalid');
                        $jobid = wpjobportal::$_common->parseID($jobid);
                    }
                    if(is_numeric($jobid) && $jobid > 0){
                        // below code is only here until the interface is not built properly
                        $job_title_options = get_option('wpjobportal_job_document_title_settings');
                        if(!empty($job_title_options)){
                            $page_title_val = $job_title_options;
                        }

                        $page_title_val = WPJOBPORTALincluder::getJSModel('job')->makeJobSeoDocumentTitle($page_title_val , $jobid);
                    }
                break;
                case 'viewresume':
                    $resumeid = (!empty(wpjobportal::$_data[0]['personal_section']) && isset(wpjobportal::$_data[0]['personal_section']->id)) ? wpjobportal::$_data[0]['personal_section']->id : '';
                    if($resumeid == ''){
                        $resumeid = WPJOBPORTALrequest::getVar('wpjobportalid');
                        $resumeid = wpjobportal::$_common->parseID($resumeid);
                    }
                    if(is_numeric($resumeid) && $resumeid > 0){
                        // below code is only here until the interface is not built properly
                        $resume_title_options = get_option('wpjobportal_resume_document_title_settings');
                        if(!empty($resume_title_options)){
                            $page_title_val = $resume_title_options;
                        }

                        $page_title_val = WPJOBPORTALincluder::getJSModel('resume')->makeResumeSeoDocumentTitle($page_title_val , $resumeid);
                    }
                break;
                default: // for all other layouts
                    $matcharray = array(
                        '[separator]' => '|',
                        '[sitename]' => get_bloginfo( 'name', 'display' )
                    );
                    $page_title_val = $this->replaceMatches($page_title_val,$matcharray);
                    break;
            }
        }
        return $page_title_val;
    }

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

    function WPJobPortalMetaTags(){
        $module = $this->module_name;
        $layout = $this->file_name;
        // making sure our layout is being opened & making sure proper values are set
        if ($module != '' && $layout != '') {
            $description = $this->getWPJobPortalMetaDescriptionByPage($module, $layout);
            if(!empty($description)){
                echo '<meta name="description" content="'.esc_html($description).'"/>'."\n";
            }
        }
    }
	
    function isElegantDesignEnabled(){
        if(in_array('elegantdesign', wpjobportal::$_active_addons)){
            // check if addon is not properly installed
            if (!$this->WPJPcheck_field()) {
				if(!current_user_can('manage_options')){
					return false;
				}
            }
            return true;
        }

        return false;
    }

    function getWPJobPortalMetaDescriptionByPage($module,$layout){
        $description = '';
        if ($module != '' && $layout != '') {
            switch ($layout) {
                case 'controlpanel':
                    $description = esc_html(__('This Is Meta Description', 'wp-job-portal'));
                    break;
                }
        }
        return $description;
    }

    function checkLanguageSpecialCase(){
        $locale = get_locale();
        $locale = strtolower(substr($locale, 0,2));
        switch ($locale) {
            case 'ja':
            // case 'ja_JP':
                return false;
            break;
            case 'ko':
            // case 'ko_KR':
                return false;
            break;
            case 'es':
            // case 'es_ES':
                return false;
            break;
            case 'zh':
            // case 'zh_CN':
            // case 'zh_TW':
            // case 'zh_HK':
                return false;
            break;
            case 'el':
                return false;
            break;
            case 'de':
            //case 'de_DE':
                return false;
            break;

        }
        return true;
    }

    function encodeIdForDownload($resume_id){
        if( $resume_id == ''){
            return '';
        }
        $string_data = gmdate( 'Y-m-d H:i:s' )."Z".$resume_id;
        //$resume_id_string = (base64_encode($string_data));
        $resume_id_string = strtr(base64_encode($string_data), '+/', '-_');;
        return $resume_id_string;
    }

    function decodeIdForDownload($resume_id_string){
        if($resume_id_string == ''){
            return '';
        }

        $string_val = base64_decode($resume_id_string);
        $string_val = base64_decode(strtr($resume_id_string, '-_', '+/'));

        $string_array = explode('Z', $string_val);

        $date_time = $string_array[0];
        $current_time = gmdate( 'Y-m-d H:i:s' );

        $dateTime1 = new DateTime($date_time);
        $dateTime2 = new DateTime($current_time);

        // Calculate the difference
        // $interval = $dateTime1->diff($dateTime2);

        // Get the total difference in seconds
        $secondsDifference = abs($dateTime1->getTimestamp() - $dateTime2->getTimestamp());

        // Check if the difference is less than an hour (3600 seconds)
        if ($secondsDifference < 3600) {
            $resume_id = $string_array[1];
            return $resume_id;
        }

        return '';
    }


    function applyThresholdOnResults($results, $highest_score, $enitity_for) {
        if (empty($results)) {
            return $results; // Return early if no results
        }

        $threshold = 30; // Percentage threshold
        $highest_custom_score = $results[0]->custom_score ?? 0;

        // Calculate threshold values
        $custom_score_threshold_value = ($threshold / 100) * $highest_custom_score;
        $score_threshold_value = ($threshold / 100) * $highest_score;

        // Track highest scores for each jobid
        $unique_results = [];

        foreach ($results as $result) {
            // Skip results below the threshold (except the first result)
            if (
                ($result->custom_score <= $custom_score_threshold_value && $result !== $results[0]) &&
                ($result->score <= $score_threshold_value && $result !== $results[0])
            ) {
                continue;
            }

            if($result->custom_score == 0 && $result->score < 1.5) continue;
            // Ensure uniqueness by entitiy id, keeping the highest custom_score and then the highest score
            if($enitity_for == 1){
                $record_id = $result->jobid;
            }else{
                $record_id = $result->resumeid;
            }

            if (
                !isset($unique_results[$record_id]) ||
                $result->custom_score > $unique_results[$record_id]->custom_score ||
                ($result->custom_score === $unique_results[$record_id]->custom_score && $result->score > $unique_results[$record_id]->score)
            ) {
                $unique_results[$record_id] = $result;
            }

            if (!isset($unique_results[$record_id]) || $result->score > $unique_results[$record_id]->score) {
                $unique_results[$record_id] = $result;
            }
        }
        return array_values($unique_results); // Return reindexed array
    }

    function getUniqueIdForTransient() {
        $uid = WPJOBPORTALincluder::getObjectClass('user')->uid();
        if ( is_numeric($uid) && $uid > 0 ) {
            $transient_id = 'user_' .$uid;
        } else { // Fallback: generate ID from IP + User Agent
            $ip = !empty($_SERVER['REMOTE_ADDR']) ? filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP) : '0.0.0.0';
            $useragent = !empty($_SERVER['HTTP_USER_AGENT']) ? sanitize_text_field($_SERVER['HTTP_USER_AGENT']) : 'unknown';
            $transient_id = $ip .'_'. $useragent;
        }
        $transient_id = base64_encode($transient_id);
        return  $transient_id;
    }

    function getRecordIdsForCurrentPage($job_ids_list, $page_num) {
        $current_records_to_show = '';
        if($job_ids_list !=''){
            if(!is_numeric($page_num) ){ // handle no page(first page)
                $page_num = 1;
            }
            // make an array
            $job_id_list_arrray = array_map('intval', explode(',', $job_ids_list)); // Convert to array of integers

            $pagination_size = wpjobportal::$_configuration['pagination_default_page_size'];; // How many per page

            // Calculate start index
            $page_num_offset = ($page_num - 1) * $pagination_size;

            // Get current slice of ids (array elements)
            $current_records_to_show_array = array_slice($job_id_list_arrray, $page_num_offset, $pagination_size);
            if(!empty($current_records_to_show_array)){
                $current_records_to_show = implode(',', $current_records_to_show_array); // create comma sperated string from array
            }
        }
        return $current_records_to_show;
    }

    function storeAIRecordsIDListTransient($job_ids_list, $transient_for) {
        switch ($transient_for) {
            case 1:
                $transient_string = 'ai_suggested_jobs_list_';
                break;
            case 2:
                $transient_string = 'ai_suggested_jobs_dashboard_';
                break;
            case 3:
                $transient_string = 'ai_websearch_jobs_list_';
                break;
            case 4:
                $transient_string = 'ai_suggested_resume_list_';
                break;
            case 5:
                $transient_string = 'ai_suggested_resume_dashboard_';
                break;
            case 6:
                $transient_string = 'ai_websearch_resume_list_';
                break;
            default:
                $transient_string = 'ai_suggested_jobs_list_';
                break;
        }
        // get unique transient id for current user/guesat
        $transient_id = WPJOBPORTALincluder::getJSModel('common')->getUniqueIdForTransient();
        // Store the data in a transient (expires in 1 hour)
        if($job_ids_list != '' &&  $transient_id != ''){ // making sure the data is not empty
            set_transient($transient_string.$transient_id, $job_ids_list, HOUR_IN_SECONDS);
        }
    }

    function getAIRecordsIdListFromTransient($transient_for){
        switch ($transient_for) {
            case 1:
                $transient_string = 'ai_suggested_jobs_list_';
                break;
            case 2:
                $transient_string = 'ai_suggested_jobs_dashboard_';
                break;
            case 3:
                $transient_string = 'ai_websearch_jobs_list_';
                break;
            case 4:
                $transient_string = 'ai_suggested_resume_list_';
                break;
            case 5:
                $transient_string = 'ai_suggested_resume_dashboard_';
                break;
            case 6:
                $transient_string = 'ai_websearch_resume_list_';
                break;
            default:
                $transient_string = 'ai_suggested_jobs_list_';
                break;
        }

        $result_list = '';
        // get unique transient id for current user/guesat
        $transient_id = WPJOBPORTALincluder::getJSModel('common')->getUniqueIdForTransient();
        // Store the data in a transient (expires in 1 hour)
        if($transient_id != ''){
            $result = get_transient($transient_string.$transient_id);
            if ($result !== false) { // if data is found
                $result_list = $result;
            }
        }
        return $result_list;
    }


    function updateRecordsForAISearch(){
       WPJOBPORTALincluder::getJSModel('job')->updateRecordsForAISearchJob();
        WPJOBPORTALincluder::getJSModel('resume')->updateRecordsForAISearchResume();
        update_option( 'wpjobportal_ai_search_data_sync_needed', 0,);
        return ;
    }

}
?>

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