Sindbad~EG File Manager

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

<?php

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

class WPJOBPORTALwpjobportalModel {

    function getCPJobs() {
        $query = "SELECT comp.name,comp.logofilename,cat.cat_title ,job.city
            FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs as job
            ".wpjobportal::$_company_job_table_join." JOIN " . wpjobportal::$_db->prefix . "wj_portal_companies as comp on comp.id = job.companyid
            LEFT JOIN " . wpjobportal::$_db->prefix . "wj_portal_categories as cat on cat.id = job.jobcategory";
        wpjobportal::$_data[0]['jobs'] = wpjobportaldb::get_results($query);
    }

    function getAdminControlPanelData() {
        $curdate = date_i18n('Y-m-d');
        //AND date(created) = '".esc_sql($curdate)."'
        $query = "SELECT jobtype.title,(SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` WHERE jobtype = jobtype.id ) AS totaljob FROM  `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ORDER BY jobtype.id";
        $priorities = wpjobportal::$_db->get_results($query);
        wpjobportal::$_data['today_ticket_chart']['title'] = "['".esc_html(__('Today Jobs','wp-job-portal'))."',";
        wpjobportal::$_data['today_ticket_chart']['data'] = "['',";
        foreach($priorities AS $pr){
            wpjobportal::$_data['today_ticket_chart']['title'] .= "'".wpjobportalphplib::wpJP_htmlspecialchars(wpjobportal::wpjobportal_getVariableValue($pr->title))."',";
            wpjobportal::$_data['today_ticket_chart']['data'] .= $pr->totaljob.",";
        }
        wpjobportal::$_data['today_ticket_chart']['title'] .= "]";
        wpjobportal::$_data['today_ticket_chart']['data'] .= "]";



        wpjobportal::$_data[0]['today_stats'] = WPJOBPORTALincluder::getJSModel('wpjobportal')->getTodayStats();
        WPJOBPORTALincluder::getJSModel('wpjobportal')->getNewestJObs();
        // Data for the control panel graph
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs`";
        wpjobportal::$_data['totaljobs'] = wpjobportal::$_db->get_var($query);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies`";
        wpjobportal::$_data['totalcompanies'] = wpjobportal::$_db->get_var($query);

        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` WHERE status = 1";
        wpjobportal::$_data['totalapcompanies'] = wpjobportal::$_db->get_var($query);


        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE quick_apply <> 1 ";
        wpjobportal::$_data['totalresume'] = wpjobportal::$_db->get_var($query);

        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE status = 1 AND quick_apply <> 1 ";
        wpjobportal::$_data['totalapresume'] = wpjobportal::$_db->get_var($query);


        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply`";
        wpjobportal::$_data['totaljobapply'] = wpjobportal::$_db->get_var($query);
        $curdate = gmdate('Y-m-d');
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` WHERE DATE(startpublishing) <= '".esc_sql($curdate)."' AND DATE(stoppublishing) >= '".esc_sql($curdate)."' AND status = 1";
        wpjobportal::$_data['totalactivejobs'] = wpjobportal::$_db->get_var($query);
        $newindays = WPJOBPORTALincluder::getJSModel('configuration')->getConfigurationByConfigName('newdays');
        if ($newindays == 0) {
            $newindays = 7;
        }
        $time = strtotime($curdate . ' -' . $newindays . ' days');
        $lastdate = gmdate("Y-m-d", $time);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` WHERE DATE(created) >= DATE('".esc_sql($lastdate)."') AND DATE(created) <= DATE('".esc_sql($curdate)."')";
        wpjobportal::$_data['totalnewjobs'] = wpjobportal::$_db->get_var($query);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` WHERE DATE(created) >= DATE('".esc_sql($lastdate)."') AND DATE(created) <= DATE('".esc_sql($curdate)."')";
        wpjobportal::$_data['totalnewcompanies'] = wpjobportal::$_db->get_var($query);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE DATE(created) >= DATE('".esc_sql($lastdate)."') AND DATE(created) <= DATE('".esc_sql($curdate)."') AND quick_apply <> 1 ";
        wpjobportal::$_data['totalnewresume'] = wpjobportal::$_db->get_var($query);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` WHERE DATE(apply_date) >= DATE('".esc_sql($lastdate)."') AND DATE(apply_date) <= DATE('".esc_sql($curdate)."')";
        wpjobportal::$_data['totalnewjobapply'] = wpjobportal::$_db->get_var($query);

        $curdate = gmdate('Y-m-d');
        $fromdate = gmdate('Y-m-d', strtotime("now -1 month"));
        wpjobportal::$_data['curdate'] = $curdate;
        wpjobportal::$_data['fromdate'] = $fromdate;
        $query = "SELECT job.startpublishing AS created
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job WHERE date(job.startpublishing) >= '" . esc_sql($fromdate) . "' AND date(job.startpublishing) <= '" . esc_sql($curdate) . "' ORDER BY job.startpublishing";
        $alljobs = wpjobportal::$_db->get_results($query);
        $jobs = array();
        foreach ($alljobs AS $job) {
            $date = gmdate('Y-m-d', strtotime($job->created));
            $jobs[$date] = isset($jobs[$date]) ? ($jobs[$date] + 1) : 1;
        }
        $query = "SELECT company.created
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS company WHERE date(company.created) >= '" . esc_sql($fromdate) . "' AND date(company.created) <= '" . esc_sql($curdate) . "' ORDER BY company.created";
        $allcompanies = wpjobportal::$_db->get_results($query);
        $companies = array();
        foreach ($allcompanies AS $company) {
            $date = gmdate('Y-m-d', strtotime($company->created));
            $companies[$date] = isset($companies[$date]) ? ($companies[$date] + 1) : 1;
        }
        $query = "SELECT resume.created
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume WHERE date(resume.created) >= '" . esc_sql($fromdate) . "' AND date(resume.created) <= '" . esc_sql($curdate) . "' AND resume.quick_apply <> 1   ORDER BY resume.created";
        $allresume = wpjobportal::$_db->get_results($query);
        $resumes = array();
        foreach ($allresume AS $resume) {
            $date = gmdate('Y-m-d', strtotime($resume->created));
            $resumes[$date] = isset($resumes[$date]) ? ($resumes[$date] + 1) : 1;
        }
        $query = "SELECT job.startpublishing AS created
                    FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job WHERE date(job.startpublishing) >= '" . esc_sql($fromdate) . "' AND date(job.startpublishing) <= '" . esc_sql($curdate) . "' AND job.status = 1 ORDER BY job.created";
        $allactivejob = wpjobportal::$_db->get_results($query);
        $activejobs = array();
        foreach ($allactivejob AS $ajob) {
            $date = gmdate('Y-m-d', strtotime($ajob->created));
            $activejobs[$date] = isset($activejobs[$date]) ? ($activejobs[$date] + 1) : 1;
        }
        wpjobportal::$_data['stack_chart_horizontal']['title'] = "['" . esc_html(__('Dates', 'wp-job-portal')) . "','" . esc_html(__('Jobs', 'wp-job-portal')) . "','" . esc_html(__('Companies', 'wp-job-portal')) . "','" . esc_html(__('Resume', 'wp-job-portal')) . "','" . esc_html(__('Active Jobs', 'wp-job-portal')) . "']";
        wpjobportal::$_data['stack_chart_horizontal']['data'] = '';
        for ($i = 29; $i >= 0; $i--) {
            $checkdate = gmdate('Y-m-d', strtotime($curdate . " -$i days"));
            if ($i != 29) {
                wpjobportal::$_data['stack_chart_horizontal']['data'] .= ',';
            }
            wpjobportal::$_data['stack_chart_horizontal']['data'] .= "['" . date_i18n('Y-M-d', strtotime($checkdate)) . "',";
            $job = isset($jobs[$checkdate]) ? $jobs[$checkdate] : 0;
            $company = isset($companies[$checkdate]) ? $companies[$checkdate] : 0;
            $resume = isset($resumes[$checkdate]) ? $resumes[$checkdate] : 0;
            $ajob = isset($activejobs[$checkdate]) ? $activejobs[$checkdate] : 0;
            wpjobportal::$_data['stack_chart_horizontal']['data'] .= "$job,$company,$resume,$ajob]";

        }
        // update available alert
        wpjobportal::$_data['update_avaliable_for_addons'] = $this->showUpdateAvaliableAlert();
        return;
    }

    function showUpdateAvaliableAlert(){
        require_once WPJOBPORTAL_PLUGIN_PATH.'includes/addon-updater/wpjobportalupdater.php';
        $WP_JOBPORTALUpdater    = new WP_JOBPORTALUpdater();
        $cdnversiondata = $WP_JOBPORTALUpdater->getPluginVersionDataFromCDN();
        $not_installed = array();

        $wpjobportal_addons = $this->getWPJPAddonsArray();
        $installed_plugins = get_plugins();
        $count = 0;
        foreach ($wpjobportal_addons as $key1 => $value1) {
                $matched = 0;
                $version = "";
                foreach ($installed_plugins as $name => $value) {
                        $install_plugin_name = str_replace(".php","",basename($name));
                        if($key1 == $install_plugin_name){
                                $matched = 1;
                                $version = $value["Version"];
                                $install_plugin_matched_name = $install_plugin_name;
                        }
                }
                if($matched == 1){ //installed
                        $name = $key1;
                        $title = $value1['title'];
                        $img = str_replace("wp-job-portal-", "", $key1).'.png';
                        $cdnavailableversion = "";
                        if($cdnversiondata){
                            foreach ($cdnversiondata as $cdnname => $cdnversion) {
                                    $install_plugin_name_simple = str_replace("-", "", $install_plugin_matched_name);
                                    if($cdnname == str_replace("-", "", $install_plugin_matched_name)){
                                            if($cdnversion > $version){ // new version available
                                                    $count++;
                                            }
                                    }
                            }
                        }
                }
        }
        return $count;
    }



    function getWPJPAddonsArray(){
        return  array(
            'wp-job-portal-elegantdesign' => array('title' => esc_html(__('Elegant Design','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-addressdata' => array('title' => esc_html(__('Address Data','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-sociallogin' => array('title' => esc_html(__('Social Login','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-visitorapplyjob' => array('title' => esc_html(__('visitor apply job','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-multicompany' => array('title' => esc_html(__('Multi Company','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-featuredcompany' => array('title' => esc_html(__('featured company','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-copyjob' => array('title' => esc_html(__('copy job','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-credits' => array('title' => esc_html(__('Credits','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-departments' => array('title' => esc_html(__('Department','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-export' => array('title' => esc_html(__('Export','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-featureresume' => array('title' => esc_html(__('Feature Resume','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-featuredjob' => array('title' => esc_html(__('Featured Job','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-rssfeedback' => array('title' => esc_html(__('Rss Feed','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-folder' => array('title' => esc_html(__('Folder','wp-job-portal')), 'price' => 0, 'status' => 1),   
            'wp-job-portal-jobalert' => array('title' => esc_html(__('Job Alert','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-message' => array('title' => esc_html(__('Message System','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-pdf' => array('title' => esc_html(__('PDF','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-print' => array('title' => esc_html(__('Print','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-reports'=> array('title' => esc_html(__("Reports","wp-job-portal")), 'price' => 0, 'status' => 1),
            'wp-job-portal-resumeaction' => array('title' => esc_html(__('Resume Action','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-multiresume' => array('title' => esc_html(__('Multi Resume','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-resumesearch' => array('title' => esc_html(__('Resume Search','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-shortlist' => array('title' => esc_html(__('Shortlist','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-socialshare' => array('title' => esc_html(__('Social Share','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-tag' => array('title' => esc_html(__('Tags','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-tellfriend' => array('title' => esc_html(__('Tell Friend','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-advanceresumebuilder' => array('title' => esc_html(__('Advance Resume Builder','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-visitorcanaddjob' => array('title' => esc_html(__('Visitor Add Job','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-cronjob' => array('title' => esc_html(__('Cron Job','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-widgets' => array('title' => esc_html(__('Front-End Widgets','wp-job-portal')), 'price' => 0, 'status' => 1),

            'wp-job-portal-aijobsearch' => array('title' => esc_html(__('AI Job Search','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-airesumesearch' => array('title' => esc_html(__('AI Resume Search','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-aisuggestedjobs' => array('title' => esc_html(__('AI Suggested Jobs','wp-job-portal')), 'price' => 0, 'status' => 1),
            'wp-job-portal-aisuggestedresumes' => array('title' => esc_html(__('AI Suggested Resumes','wp-job-portal')), 'price' => 0, 'status' => 1)

        );
    }


    function storeServerSerailNumber($data) {
        if (empty($data))
            return false;
        // DB class limitations
        if ($data['server_serialnumber']) {
            $query = "UPDATE  `" . wpjobportal::$_db->prefix . "wj_portal_config` SET configvalue='" . esc_sql($data['server_serialnumber']) . "' WHERE configname='server_serial_number'";

            if (!wpjobportaldb::query($query))
                return WPJOBPORTAL_SAVE_ERROR;
            else
                return WPJOBPORTAL_SAVED;
        } else
            return WPJOBPORTAL_SAVE_ERROR;
    }

    function storeModule($data,$actionname){
        # Woo Commerce Save WOrking For Module
        # Configuration Base Switch
        switch ($actionname) {
            case 'job_department_price_perlisting':
                # Department Configuration + subAddon(Purchase History)
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeDepartmentPayment($data);
                break;
            case 'job_coverletter_price_perlisting':
                # Department Configuration + subAddon(Purchase History)
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeCoverLetterPayment($data);
                break;
            case 'company_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeCompanyPayment($data);
                break;
            case 'company_feature_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeFeaturedCompanyPayment($data);
                break;
            case 'job_currency_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->StoreJobPayment($data);
                break;
            case 'jobs_feature_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeFeaturedJobPayment($data);
                break;
            case 'job_resume_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->StoreResumePayment($data);
                break;
            case 'job_featureresume_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeFeaturedResumePayment($data);
                break;
            case 'job_jobalert_price_perlisting':
               WPJOBPORTALincluder::getJSModel('purchasehistory')->storeJobAlertPayment($data);
                break;
            case 'job_resumesavesearch_price_perlisting':
                # Resume Search Payment
               WPJOBPORTALincluder::getJSModel('purchasehistory')->storeResumeSearchPayment($data);
                break;
            case 'job_jobapply_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeJobApplyPayment($data);
                break;
            case 'job_viewcompanycontact_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeCompanyViewPayment($data);
                break;
           case 'job_viewresumecontact_price_perlisting':
                WPJOBPORTALincluder::getJSModel('purchasehistory')->storeResumeViewPayment($data);
                break;
        }
    }


    function getNewestJobs() {
        $query = "SELECT  DISTINCT job.id AS id,job.currency,job.tags AS jobtags,job.title,job.created,job.city,
                    CONCAT(job.alias,'-',job.id) AS jobaliasid,job.noofjobs,job.isfeaturedjob,job.status,
                    cat.cat_title,company.id AS companyid,company.name AS companyname,company.logofilename AS logo, jobtype.title AS jobtypetitle,job.endfeatureddate,job.startpublishing,job.stoppublishing,
                    job.params,CONCAT(company.alias,'-',company.id) AS companyaliasid,LOWER(jobtype.title) AS jobtypetit,
                    job.salarymax,job.salarymin,job.salarytype,srtype.title AS salaryrangetype,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_salaryrangetypes` AS srtype ON srtype.id = job.salaryduration
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobtypes` AS jobtype ON jobtype.id = job.jobtype
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobcities` AS jobcity ON jobcity.jobid = job.id
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON city.id = jobcity.cityid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON state.countryid = city.countryid
                    LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON country.id = city.countryid
                    ORDER BY job.created DESC
                    LIMIT 0,5";
                    //getMyResumes
        wpjobportal::$_data[0]['latestjobs'] = wpjobportaldb::get_results($query);
        $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
                , 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.=" ORDER BY app.id ASC LIMIT 0,5 ";

        $results = wpjobportal::$_db->get_results($query);
        wpjobportal::$_data[0]['latestresumes'] = wpjobportaldb::get_results($query);
        wpjobportal::$_data['fields'] = wpjobportal::$_wpjpfieldordering->getFieldsOrderingforView(3);
        wpjobportal::$_data['config'] = wpjobportal::$_config->getConfigByFor('resume');
    }

    function getTodayStats() {

        $query = "SELECT count(id) AS totalcompanies
		FROM " . wpjobportal::$_db->prefix . "wj_portal_companies AS company WHERE company.status=1 AND company.created >= CURDATE();";

        $companies = wpjobportaldb::get_row($query);
        $query = "SELECT count(id) AS totaljobs
		FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs AS job WHERE job.status=1 AND job.created >= CURDATE();";

        $jobs = wpjobportaldb::get_row($query);
        $query = "SELECT count(id) AS totalresume
		FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS resume WHERE resume.status=1 AND resume.created >= CURDATE();";

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

        $query = "SELECT count(user.id) AS totalemployer
                    FROM " . wpjobportal::$_db->prefix . "wj_portal_users AS user
                    WHERE user.roleid = 1 AND DATE(user.created) = CURDATE()";

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

        $query = "SELECT count(user.id) AS totaljobseeker
                    FROM " . wpjobportal::$_db->prefix . "wj_portal_users AS user
                    WHERE user.roleid = 2 AND DATE(user.created) = CURDATE()";

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

        wpjobportal::$_data[0]['companies'] = $companies;
        wpjobportal::$_data[0]['jobs'] = $jobs;
        wpjobportal::$_data[0]['resumes'] = $resumes;
        wpjobportal::$_data[0]['employer'] = $employer;
        wpjobportal::$_data[0]['jobseeker'] = $jobseeker;
        return;
    }

    function getConcurrentRequestData() {

        $query = "SELECT configname,configvalue FROM `".wpjobportal::$_db->prefix."wj_portal_config` WHERE configfor = hostdata";
        $result = wpjobportaldb::get_results($query);
        foreach ($result AS $res) {
            $return[$res->configname] = $res->configvalue;
        }
        return $return;
    }

    function getMultiCityDataForView($id, $for) {
        if (!is_numeric($id))
            return false;

        $query = "select mcity.id AS id,country.name AS countryName,city.name AS cityName,state.name AS stateName, city.id AS cityid";
        switch ($for) {
            case 1:
                $query.=" FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobcities` AS mcity";
                $query.=" LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job ON mcity.jobid=job.id";
                break;
            case 2:
                $query.=" FROM `" . wpjobportal::$_db->prefix . "wj_portal_companycities` AS mcity";
                $query.=" LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS company ON mcity.companyid=company.id";
                break;
        }
        $query.=" LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_cities` AS city ON mcity.cityid=city.id
				  LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_states` AS state ON city.stateid=state.id
				  LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_countries` AS country ON city.countryid=country.id";
        switch ($for) {
            case 1:
                $query.=" where mcity.jobid=" . esc_sql($id);
                break;
            case 2:
                $query.=" where mcity.companyid=" . esc_sql($id);
                break;
        }
        $query.=" ORDER BY country.name";

        $cities = wpjobportaldb::get_results($query);
        $mloc = array();
        $mcountry = array();
        $finalloc = "";
        $cityids = '';
        foreach ($cities AS $city) {
            if($cityids != ''){
                $cityids .= ',';
            }
            $cityids .= $city->cityid;
            // if ($city->countryName != null)
            //     $mcountry[] = $city->countryName;
        }
        if($cityids != ''){
            $finalloc = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView($cityids);
        }
        // if (!empty($mcountry)) {
        //     $country_total = array_count_values($mcountry);
        // } else {
        //     $country_total = array();
        // }
        // $i = 0;
        // foreach ($country_total AS $key => $val) {
        //     foreach ($cities AS $city) {
                
        //         if ($key == $city->countryName) {
        //             $i++;
        //             if ($val == 1) {
        //                 $finalloc.="[" . $city->cityName . ", " . $key . " ] ";
        //                 $i = 0;
        //             } elseif ($i == $val) {
        //                 $finalloc.=$city->cityName . ", " . $key . " ] ";
        //                 $i = 0;
        //             } elseif ($i == 1)
        //                 $finalloc.= "[" . $city->cityName . ", ";
        //             else
        //                 $finalloc.=$city->cityName . ", ";
        //         }
        //     }
        // }
        return $finalloc;
    }

    function getwpjobportalStats() {

        $query = "SELECT count(id) AS totalcompanies,(SELECT count(company.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_companies AS company WHERE company.status=1 ) AS activecompanies
		FROM " . wpjobportal::$_db->prefix . "wj_portal_companies ";

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

        $query = "SELECT count(id) AS totaljobs,(SELECT count(job.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs AS job WHERE job.status=1 AND job.stoppublishing >= CURDATE())  AS activejobs
		FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs ";

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

        $query = "SELECT count(id) AS totalresumes,(SELECT count(resume.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_resume AS resume WHERE resume.status=1 ) AS activeresumes
		FROM " . wpjobportal::$_db->prefix . "wj_portal_resume ";

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

        if(in_array('featuredcompany', wpjobportal::$_active_addons) && in_array('credits', wpjobportal::$_active_addons)){
            $query = "SELECT (SELECT COUNT(id) FROM " . wpjobportal::$_db->prefix . "wj_portal_companies WHERE isfeaturedcompany=1) AS totalfeaturedcompanies,
    				(SELECT count(featuredcompany.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_companies  AS featuredcompany
    				JOIN  " . wpjobportal::$_db->prefix . "wj_portal_userpackages AS package ON package.id=featuredcompany.userpackageid
    				WHERE  featuredcompany.status=1 AND featuredcompany.isfeaturedcompany=1  AND featuredcompany.endfeatureddate >= CURDATE() ) AS activefeaturedcompanies
    		FROM " . wpjobportal::$_db->prefix . "wj_portal_companies";

            $featuredcompanies = wpjobportaldb::get_row($query);
            wpjobportal::$_data[0]['featuredcompanies'] = $featuredcompanies;
        }
        if(in_array('featuredjob', wpjobportal::$_active_addons) && in_array('credits', wpjobportal::$_active_addons)){
            $query = "SELECT ( SELECT COUNT(id) FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs WHERE isfeaturedjob=1 ) AS totalfeaturedjobs,(SELECT count(featuredjob.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs AS featuredjob
    		JOIN  " . wpjobportal::$_db->prefix . "wj_portal_userpackages AS package ON package.id=featuredjob.userpackageid
    		WHERE  featuredjob.status= 1 AND featuredjob.isfeaturedjob= 1  AND featuredjob.endfeatureddate >= CURDATE() ) AS activefeaturedjobs
    		";
            $featuredjobs = wpjobportaldb::get_row($query);
            wpjobportal::$_data[0]['featuredjobs'] = $featuredjobs;
        }


        if(in_array('featureresume', wpjobportal::$_active_addons) && in_array('credits', wpjobportal::$_active_addons)){
            $query = "SELECT ( SELECT COUNT(id) FROM " . wpjobportal::$_db->prefix . "wj_portal_resume WHERE isfeaturedresume=1 ) AS totalfeaturedresumes,(SELECT count(featuredresume.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_resume  AS featuredresume
    		JOIN  " . wpjobportal::$_db->prefix . "wj_portal_userpackages AS package ON package.id=featuredresume.userpackageid
    		WHERE  featuredresume.status= 1 AND featuredresume.isfeaturedresume= 1  AND featuredresume.endfeatureddate >= CURDATE() ) AS activefeaturedresumes
    		";

            $featuredresumes = wpjobportaldb::get_row($query);
            wpjobportal::$_data[0]['featuredresumes'] = $featuredresumes;
        }


        $totalpaidamount = 'Recalculate';

        $query = "SELECT count(user.id) AS totalemployer
                    FROM " . wpjobportal::$_db->prefix . "wj_portal_users AS user
                    WHERE user.roleid = 1";

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

        $query = "SELECT count(user.id) AS totaljobseeker
                    FROM " . wpjobportal::$_db->prefix . "wj_portal_users AS user
                    WHERE user.roleid=2";

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

        wpjobportal::$_data[0]['companies'] = $companies;
        wpjobportal::$_data[0]['jobs'] = $jobs;
        wpjobportal::$_data[0]['resumes'] = $resumes;
        wpjobportal::$_data[0]['totalpaidamount'] = $totalpaidamount;
        wpjobportal::$_data[0]['totalemployer'] = $totalemployer;
        wpjobportal::$_data[0]['totaljobseeker'] = $totaljobseeker;
        return;
    }


    function widgetTotalStatsData() {
        $query = "SELECT count(id) AS totalcompanies
        FROM " . wpjobportal::$_db->prefix . "wj_portal_companies ";

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

        $query = "SELECT count(id) AS totaljobs,(SELECT count(job.id) FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs AS job WHERE job.status=1 AND job.stoppublishing >= CURDATE())  AS activejobs
        FROM " . wpjobportal::$_db->prefix . "wj_portal_jobs ";

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

        $query = "SELECT count(id) AS totalresumes
        FROM " . wpjobportal::$_db->prefix . "wj_portal_resume ";

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

        $query = "SELECT count(DISTINCT jobid) AS appliedjobs
        FROM " . wpjobportal::$_db->prefix . "wj_portal_jobapply ";

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


        wpjobportal::$_data['widget']['companies'] = $companies;
        wpjobportal::$_data['widget']['jobs'] = $jobs;
        wpjobportal::$_data['widget']['resumes'] = $resumes;
        wpjobportal::$_data['widget']['aplliedjobs'] = $aplliedjobs;
        return true;
    }

    function widgetLastWeekData() {
        $newindays = 7;
        $curdate = gmdate('Y-m-d');
        $time = strtotime($curdate . ' -' . $newindays . ' days');
        $lastdate = gmdate("Y-m-d", $time);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` WHERE DATE(created) >= DATE('" . esc_sql($lastdate) . "') AND DATE(created) <= '" . esc_sql($curdate) . "'";
        wpjobportal::$_data['widget']['newjobs'] = wpjobportal::$_db->get_var($query);
        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` WHERE DATE(created) >= DATE('" . esc_sql($lastdate) . "') AND DATE(created) <= DATE('" . esc_sql($curdate) . "')";
        wpjobportal::$_data['widget']['newcompanies'] = wpjobportal::$_db->get_var($query);

        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` WHERE DATE(created) >= DATE('" . esc_sql($lastdate) . "') AND DATE(created) <= DATE('" . esc_sql($curdate) . "')";
        wpjobportal::$_data['widget']['newresume'] = wpjobportal::$_db->get_var($query);

        $query = "SELECT COUNT(id) FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` WHERE DATE(apply_date) >= '" . esc_sql($lastdate) . "' AND DATE(apply_date) <= '" . esc_sql($curdate) . "'";
        wpjobportal::$_data['widget']['newjobapply'] = wpjobportal::$_db->get_var($query);
        if(!wpjobportal::$_data['widget']['newjobapply']) wpjobportal::$_data['widget']['newjobapply'] = 0;

        wpjobportal::$_data['widget']['startdate'] = gmdate('d M, Y', strtotime($lastdate));
        wpjobportal::$_data['widget']['enddate'] = gmdate('d M, Y', strtotime($curdate));
        return true;
    }

    function getDataForWidgetPopup() {
        $dataid = WPJOBPORTALrequest::getVar('dataid');
        $newindays = 7;
        $curdate = gmdate('Y-m-d');
        $time = strtotime($curdate . ' -' . $newindays . ' days');
        $lastdate = gmdate("Y-m-d", $time);
        if ($dataid == 1) { //job
            $query = "SELECT job.companyid AS id,job.title,isfeaturedjob AS isfeatured
                        ,job.status,cat.cat_title,job.city,comp.logofilename AS photo
            FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job
            ".wpjobportal::$_company_job_table_join." JOIN `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS comp ON comp.id = job.companyid
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON cat.id = job.jobcategory
            WHERE DATE(job.created) >= DATE('" . esc_sql($lastdate) . "') AND DATE(job.created) <= DATE('" . esc_sql($curdate) . "')
            ORDER BY job.created DESC LIMIT 5";
            $results = wpjobportal::$_db->get_results($query);
        }
        if ($dataid == 2) { //company
            $query = "SELECT comp.id ,comp.name AS title,comp.isfeaturedcompany AS isfeatured
                        ,comp.city,comp.status,comp.logofilename AS photo,cat.cat_title
            FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS comp
            LEFT JOIN `" . wpjobportal::$_db->prefix . "wj_portal_categories` AS cat ON cat.id = comp.category
            WHERE DATE(comp.created) >= DATE('" . esc_sql($lastdate) . "') AND DATE(comp.created) <= DATE('" . esc_sql($curdate) . "')
            ORDER BY comp.created DESC LIMIT 5";
            $results = wpjobportal::$_db->get_results($query);
        }
        if ($dataid == 3) {     //resume
            $query = "SELECT resume.id, CONCAT(resume.application_title,' ( ',resume.first_name,' ',resume.last_name,' )' ) AS title,resume.isfeaturedresume AS isfeatured,resume.status,cat.cat_title,resume.photo
            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 DATE(resume.created) >= DATE('" . esc_sql($lastdate) . "') AND DATE(resume.created) <= DATE('" . esc_sql($curdate) . "')
            ORDER BY resume.created DESC LIMIT 5";
            $results = wpjobportal::$_db->get_results($query);
        }
        if ($dataid == 4) {  //jobappply
            $query = "SELECT  comp.id,comp.logofilename AS logo,job.title AS title
                    ,CONCAT(resume.application_title,' / ',resume.first_name,' ',resume.last_name) AS name
                    ,jobapp.apply_date,jobapp.action_status as status,job.isfeaturedjob AS isfeatured
            FROM `" . wpjobportal::$_db->prefix . "wj_portal_jobapply` AS jobapp
            JOIN `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume ON resume.id = jobapp.cvid
            JOIN `" . wpjobportal::$_db->prefix . "wj_portal_jobs` AS job on job.id = jobapp.jobid
            ".wpjobportal::$_company_job_table_join." JOIN `" . wpjobportal::$_db->prefix . "wj_portal_companies` AS comp ON comp.id = job.companyid
            WHERE DATE(jobapp.apply_date) >= DATE('" . esc_sql($lastdate) . "') AND DATE(jobapp.apply_date) <= DATE('" . esc_sql($curdate) . "')
            ORDER BY jobapp.apply_date DESC LIMIT 5";
            $results = wpjobportal::$_db->get_results($query);
        }
        $html = $this->generatePopup($results, $dataid);
        return $html;
    }

//function to denerate popup from new jobs companies and resume
    function generatePopup($results, $dataid) {
        if ($dataid == 1) {
            $title = esc_html(__('Newest Jobs', 'wp-job-portal'));
        } elseif ($dataid == 2) {
            $title = esc_html(__('Newest Companies', 'wp-job-portal'));
        } elseif ($dataid == 3) {
            $title = esc_html(__('Newest Resumes', 'wp-job-portal'));
        } elseif ($dataid == 4) {
            $title = esc_html(__('Newest Applied Jobs', 'wp-job-portal'));
        }
        $html = '';
        $html = '<span class="popup-top">
                    <span id="popup_title" >
                    ' . $title . '
                    </span>
                    <img id="popup_cross" src="' . esc_url(WPJOBPORTAL_PLUGIN_URL) . 'includes/images/popup-close.png">
                </span>
                <div class="widget-popup-body">';
        if (empty($results)) {
            $error = '
                <div class="js_job_error_messages_wrapper">
                    <div class="message1">
                        <span>
                            ' . esc_html(__("Oops...", 'wp-job-portal')) . '
                        </span>
                    </div>
                    <div class="message2">
                         <span class="img">
                        <img class="js_job_messages_image" src="' . esc_url(WPJOBPORTAL_PLUGIN_URL) . 'includes/images/norecordfound.png"/>
                         </span>
                         <span class="message-text">
                            ' . esc_html(__('Record Not Found', 'wp-job-portal')) . '
                         </span>
                    </div>
                    <div class="footer">
                        <a href ="' . 'admin.php?page=wpjobportal' . '">' . esc_html(__('Back to control panel', 'wp-job-portal')) . '</a>
                    </div>
                </div>
        ';
            $html .= ' ' . $error . '</div>';
            return $html;
        }

        //popup layout for new job /company/resume
        if ($dataid != 4) {
            //1 = newest jobs
            //2 = newest compnay
            //3 = newest resume
            //4 = applied jobs

            foreach ($results as $data) {
                //photo / logo
                //for company and job
                $data_directory = WPJOBPORTALincluder::getJSModel('configuration')->getConfigurationByConfigName('data_directory');
                $wpdir = wp_upload_dir();
                if ($dataid == 1 || $dataid == 2) {
                    if ($data->photo != "") {
                        $path = $wpdir['baseurl'] . '/' . $data_directory . '/data/employer/comp_' . $data->id . '/logo/' . $data->photo;
                    } else {
                        $path = WPJOBPORTALincluder::getJSModel('common')->getDefaultImage('employer');
                    }
                } elseif ($data->photo != "") {
                    $path = $wpdir['baseurl'] . '/' . $data_directory . '/data/jobseeker/resume_' . $data->id . '/photo/' . $data->photo;
                } else {
                    $path = WPJOBPORTALincluder::getJSModel('common')->getDefaultImage('jobseeker');
                }

                $picstyle = '';
                //bottom link

                if ($dataid == 1) {
                    $link = 'admin.php?page=wpjobportal_job&wpjobportallt=jobs';
                }
                if ($dataid == 2) {
                    $link = 'admin.php?page=wpjobportal_company&wpjobportallt=companies';
                }
                if ($dataid == 3) {
                    $link = 'admin.php?page=wpjobportal_resume&wpjobportallt=resumes';
                    $picstyle = 'resume-img';
                }


                //city //resume has education not city
                if ($dataid != 3) {
                    $data->city = WPJOBPORTALincluder::getJSModel('city')->getLocationDataForView($data->city);
                }
                //flags expressing status
                if ($data->status == 0) {
                    $flaghtml = '<div class="pending-badge badges">
                                        <span class="flag pending"><span></span>' . esc_html(__('Pending', 'wp-job-portal')) . '</span>
                                        </div>';
                } elseif ($data->status == 1) {
                    $flaghtml = '<div class="approved-badge badges">
                                        <span class="flag approved"><span></span>' . esc_html(__('Approved', 'wp-job-portal')) . '</span>
                                        </div>';
                } else {
                    $flaghtml = '<div class="rejected-badge badges">
                                        <span class="flag rejected"><span></span>' . esc_html(__('Rejected', 'wp-job-portal')) . '</span>
                                        </div>';
                }


                $html .= '<div class="widget-data-wrapper">
                                    <div class="left-data ' . $picstyle . '">
                                    <img class="left-data-img" src="' . $path . '"/>
                                    </div>
                                    <div class="right-data">
                                        <div class="data-title">
                                        ' . $data->title;
                if ($data->isfeatured == 1) {
                    $html .= '<span id="badge_featured" class="feature badge featured">' . esc_html(__('Featured', 'wp-job-portal')) . '</span>';
                }

                $html .= '</div>
                                        <div class="data-data">
                                            <span class="heading">
                                            ' . esc_html(__('Category', 'wp-job-portal')) . ' :
                                            </span>
                                            <span class="text">
                                            ' . $data->cat_title . '
                                            </span>
                                        </div>';
                if ($dataid != 3) {
                    $html .= '<div class="data-data">
                                                    <span class="heading">
                                                ' . esc_html(__('Location', 'wp-job-portal')) . ' :
                                                </span>
                                                <span class="text">
                                                ' . $data->city . '
                                                </span>';
                } else {
                    $html .= '<div class="data-data">
                                                    <span class="heading">
                                                ' . esc_html(__('Highest Education', 'wp-job-portal')) . ' :
                                                </span>
                                                <span class="text">
                                                ' . $data->education . '
                                                </span>';
                }
                $html .='
                                        </div>
                                        ' . $flaghtml . '
                                    </div>
                                </div>';
            }
        } elseif ($dataid == 4) {
            $html .= $this->getAppliedJobPopup($results);
            return $html;
        }
        $html .= '<a href = "' . $link . '" class="popup-bottom-button">' . esc_html(__('Show More', 'wp-job-portal')) . '</a></div>';
        return $html;
    }

//function to create popup of newest applied jobs
    function getAppliedJobPopup($results) {
        $html = '';
        $wpdir = wp_upload_dir();
        $data_directory = WPJOBPORTALincluder::getJSModel('configuration')->getConfigurationByConfigName('data_directory');
        foreach ($results as $data) {
            //photo / logo
            $path = WPJOBPORTALincluder::getJSModel('common')->getDefaultImage('employer');
            if ($data->logo != "") {
                $path = $wpdir['baseurl'] . '/' . $data_directory . '/data/employer/comp_' . $data->id . '/logo/' . $data->logo;
            }


            //flags expressing status
            $flaghtml = '';
            if ($data->status == 2) {
                $flaghtml = '<div class="spam-badge badges">
                                        <span class="flag spam"><span></span>' . esc_html(__('Spam', 'wp-job-portal')) . '</span>
                                        </div>';
            } elseif ($data->status == 3) {
                $flaghtml = '<div class="hired-badge badges">
                                        <span class="flag hired"><span></span>' . esc_html(__('Hired', 'wp-job-portal')) . '</span>
                                        </div>';
            } elseif ($data->status == 4) {
                $flaghtml = '<div class="reject-badge badges">
                                        <span class="flag reject"><span></span>' . esc_html(__('Rejected', 'wp-job-portal')) . '</span>
                                        </div>';
            } elseif ($data->status == 5) {
                $flaghtml = '<div class="shortlisted-badge badges">
                                        <span class="flag shortlisted"><span></span>' . esc_html(__('Short listed', 'wp-job-portal')) . '</span>
                                        </div>';
            }


            $html .= '<div class="widget-data-wrapper">
                                    <div class="left-data">
                                        <img class="left-data-img" src="' . $path . '"/>
                                    </div>
                                    <div class="right-data">
                                        <div class="data-title">
                                        ' . $data->title;
            if ($data->isfeatured == 1) {
                $html .= '<span id="badge_featured" class="feature badge featured">' . esc_html(__('Featured', 'wp-job-portal')) . '</span>';
            }

            $html .= '</div>
                                        <div class="data-data">
                                            <span class="heading">
                                            ' . esc_html(__('Applicant', 'wp-job-portal')) . ' :
                                            </span>
                                            <span class="text">
                                            ' . $data->name . '
                                            </span>
                                        </div>';
            $html .= '<div class="data-data">
                                                    <span class="heading">
                                                ' . esc_html(__('Applied Date', 'wp-job-portal')) . ' :
                                                </span>
                                                <span class="text">
                                                ' . $data->apply_date . '
                                                </span>';

            $html .='
                                        </div>
                                        ' . $flaghtml . '
                                    </div>

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

    // function getLatestResumes() {
    //     if(!is_numeric($uid)){
    //         return false;
    //     }
    //     $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.experienceid,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.endfeatureddate,resume.params,resume.last_modified,LOWER(jobtype.title) AS jobtypetit,jobtype.color as jobtypecolor
    //             FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume` AS resume
    //             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);
    //             $query.=" ORDER BY resume.id ASC LIMIT 0,5 ";

    //     $results = wpjobportal::$_db->get_results($query);
    //     $data = array();
    //     foreach ($results AS $d) {
    //         $d->location = wpjobportal::$_common->getLocationForView($d->cityname, $d->statename, $d->countryname);//  updated the query select to select 'name' as cityname
    //         $data[] = $d;
    //     }
    //     wpjobportal::$_data['fields'] = WPJOBPORTALincluder::getJSModel('fieldordering')->getFieldsOrderingforView(3);
    //     wpjobportal::$_data[0]['latestresumes'] = $data;
    //     wpjobportal::$_data['config'] = wpjobportal::$_config->getConfigByFor('resume');
    //     wpjobportal::$_data['listingfields'] = WPJOBPORTALincluder::getJSModel('fieldordering')->getFieldsForListing(3);
    //     return;
    // }

    function getNewestUsers($role) {
        if (!is_numeric($role))
            return false;
        $query = "SELECT u.id,CONCAT(u.first_name,' ',u.last_name) AS username,u.emailaddress AS email,u.created AS created
        FROM `" . wpjobportal::$_db->prefix . "wj_portal_users` AS u
        WHERE u.roleid = " . esc_sql($role) . " ORDER BY u.created DESC LIMIT 5";

        $results = wpjobportal::$_db->get_results($query);
        //company logo for employer
        if ($role == 1) {
            $data = array();
            foreach ($results AS $d) {
                if (!is_numeric($d->id)) {
                    continue;
                }
                $query = "SELECT logofilename AS photo,id AS companyid FROM `" . wpjobportal::$_db->prefix . "wj_portal_companies`
                WHERE uid = " . esc_sql($d->id) . " ORDER BY logofilename DESC LIMIT 1";
				$result = wpjobportal::$_db->get_row($query);
                if($result){
                    $d->photo = $result->photo;
                    $d->companyid = $result->companyid;
                }else{
                    $d->photo = '';
                    $d->companyid = '';
                }
                $data[] = $d;
            }
            $results = $data;
        }
        //resume photo  for jobseeker
        if ($role == 2) {
            $data = array();
            foreach ($results AS $d) {
                if(!is_numeric($d->id)){
                    continue;
                }
                $query = "SELECT photo,id AS resumeid FROM `" . wpjobportal::$_db->prefix . "wj_portal_resume`
                WHERE uid = " . esc_sql($d->id) . " ORDER BY photo DESC LIMIT 1";
				$result = wpjobportal::$_db->get_row($query);
                if($result){
                    $d->photo = $result->photo;
                    $d->resumeid = $result->resumeid;
                }else{
                    $d->photo = '';
                    $d->resumeid = '';
                }
                $data[] = $d;
            }
            $results = $data;
        }
        $html = $this->genrateUserWidget($results, $role);
        return $html;
    }
	function WPJPcheck_autfored() {
        // Retrieve the option
        $option_name = 'portledadofor_k';
        $stored_data = get_option($option_name);

        if ($stored_data) {
            // Compare the encrypted value
            if ($stored_data['wpjpkeyedfieldforkey']) {
                return $stored_data['wpjpkeyedfieldforkey']; // Match found
            }
        }

        return; // No match
    }

    function genrateUserWidget($results, $role) {
        $html = '';
        $html .= '<div id="wp-job-portal-widget-wrapper">';
        $wpdir = wp_upload_dir();
        $data_directory = WPJOBPORTALincluder::getJSModel('configuration')->getConfigurationByConfigName('data_directory');
        foreach ($results as $data) {
            //name
            $name = $data->username;
            //photo code
            $path = WPJOBPORTALincluder::getJSModel('common')->getDefaultImage('jobseeker');
            if ($role == 1) {
                if ($data->photo != "") {
                    $path = $wpdir['baseurl'] . '/' . $data_directory . '/data/employer/comp_' . $data->companyid . '/logo/' . $data->photo;
                }
            } elseif ($data->photo != "") {
                $path = $wpdir['baseurl'] . '/' . $data_directory . '/data/jobseeker/resume_' . $data->resumeid . '/photo/' . $data->photo;
            }
            //photo code
            $dateformat = wpjobportal::$_configuration['date_format'];
            $html .= '<div class="users-widget-data">
                        <img class="photo" src="' . esc_url($path) . '"/>
                        <div class="widget-data-upper">
                            <a href="'.esc_url_raw(admin_url('admin.php?page=wpjobportal_user&wpjobportallt=userdetail&id='.esc_attr($data->id))).'">
                                '. esc_html($name) .'
                            </a>
                            <span class="Widget-data-date">( ' . esc_html(date_i18n($dateformat, strtotime($data->created))) . ' )</span>
                        </div>
                        <div class="widget-data-lower">
                            ' . esc_html($data->email) . '
                        </div>
                    </div>';
        }

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

    function getListTranslations() {

        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'get-list-translations') ) {
            die( 'Security check Failed' );
        }

        $result = array();
        $result['error'] = false;

        $path = WPJOBPORTAL_PLUGIN_PATH.'languages';

        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->is_writable($path)){
            $result['error'] = esc_html(__('Dir is not writable','wp-job-portal')).' '.$path;

        }else{

            if($this->isConnected()){

                $version = WPJOBPORTALIncluder::getJSModel('configuration')->getConfigByFor('default');

                $post_data = array();
                $url = "http://www.joomsky.com/translations/api/1.0/index.php";
                $post_data['product'] ='wp-job-portal-wp';
                $post_data['domain'] = get_site_url();
                $post_data['producttype'] = $version['producttype'];
                $post_data['productcode'] = 'wpjobportal';
                $post_data['productversion'] = $version['version'];
                $post_data['JVERSION'] = get_bloginfo('version');
                $post_data['method'] = 'getTranslations';

                $response = wp_remote_post( $url, array('body' => $post_data,'timeout'=>7,'sslverify'=>false));
                if( !is_wp_error($response) && $response['response']['code'] == 200 && isset($response['body']) ){
                    $call_result = $response['body'];
                }else{
                    $call_result = false;
                    if(!is_wp_error($response)){
                       $error = $response['response']['message'];
                   }else{
                        $error = $response->get_error_message();
                   }
                }

                $result['data'] = $call_result;
                if(!$call_result){
                    $result['error'] = $error;
                }
            }else{
                $result['error'] = esc_html(__('Unable to connect to server','wp-job-portal'));
            }
        }

        $result = wp_json_encode($result);

        return $result;
    }

    function makeLanguageCode($lang_name){
        $langarray = wp_get_installed_translations('core');
        $langarray = $langarray['default'];
        $match = false;
        if(array_key_exists($lang_name, $langarray)){
            $lang_name = $lang_name;
            $match = true;
        }else{
            $m_lang = '';
            foreach($langarray AS $k => $v){
                if($lang_name[0].$lang_name[1] == $k[0].$k[1]){
                    $m_lang .= $k.', ';
                }
            }

            if($m_lang != ''){
                $m_lang = wpjobportalphplib::wpJP_substr($m_lang, 0,wpjobportalphplib::wpJP_strlen($m_lang) - 2);
                $lang_name = $m_lang;
                $match = 2;
            }else{
                $lang_name = $lang_name;
                $match = false;
            }
        }

        return array('match' => $match , 'lang_name' => $lang_name);
    }

    function validateAndShowDownloadFileName( ){

        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'validate-and-show-download-filename') ) {
            die( 'Security check Failed' );
        }
        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 );
        }

        $lang_name = WPJOBPORTALrequest::getVar('langname');
        if($lang_name == '') return '';
        $result = array();
        $f_result = $this->makeLanguageCode($lang_name);
        $path = WPJOBPORTAL_PLUGIN_PATH.'languages';
        $result['error'] = false;
        if($f_result['match'] === false){
            $result['error'] = $lang_name. ' ' . esc_html(__('Language is not installed','wp-job-portal'));
        }elseif( ! $wp_filesystem->is_writable($path)){
            $result['error'] = $lang_name. ' ' . esc_html(__('Language directory is not writeable','wp-job-portal')).': '.$path;
        }else{
            $result['input'] = '<input id="languagecode" class="text_area" type="text" value="'.esc_attr($lang_name).'" name="languagecode">';
            if($f_result['match'] === 2){
                $result['input'] .= '<div id="js-emessage-wrapper" style="display:block;margin:20px 0px 20px;">';
                $result['input'] .= esc_html(__('Required language is not installed but similar language[s] like','wp-job-portal')).': "<b>'.esc_html($f_result['lang_name']).'</b>" '.esc_html(__('is found in your system','wp-job-portal'));
                $result['input'] .= '</div>';

            }
            $result['path'] = esc_html(__('Language code','wp-job-portal'));
        }
        $result = wp_json_encode($result);
        return $result;
    }

    function getLanguageTranslation(){

        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'get-language-translation') ) {
            die( 'Security check Failed' );
        }
        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 );
        }


        $lang_name = WPJOBPORTALrequest::getVar('langname');
        $language_code = WPJOBPORTALrequest::getVar('filename');

        $result = array();
        $result['error'] = false;
        $path = WPJOBPORTAL_PLUGIN_PATH.'languages';

        if($lang_name == '' || $language_code == ''){
            $result['error'] = esc_html(__('Empty values','wp-job-portal'));
            return wp_json_encode($result);
        }

        $final_path = $path.'/wp-job-portal-'.$language_code.'.po';


        $langarray = wp_get_installed_translations('core');
        $langarray = $langarray['default'];

        if(!array_key_exists($language_code, $langarray)){
            $result['error'] = $lang_name. ' ' . esc_html(__('Language is not installed','wp-job-portal'));
            return wp_json_encode($result);
        }elseif( ! $wp_filesystem->is_writable($path)){
            $result['error'] = $lang_name. ' ' . esc_html(__('Language directory is not writable','wp-job-portal')).': '.$path;
            return wp_json_encode($result);
        }

        if( ! $wp_filesystem->exists($final_path)){
            //touch($final_path);
        }

        if( ! $wp_filesystem->is_writable($final_path)){
            $result['error'] = esc_html(__('File is not writable','wp-job-portal')).': '.$final_path;
        }else{

            if($this->isConnected()){

                $version = WPJOBPORTALIncluder::getJSModel('configuration')->getConfigByFor('version');

                $url = "http://www.joomsky.com/translations/api/1.0/index.php";
                $post_data['product'] ='wp-job-portal-wp';
                $post_data['domain'] = get_site_url();
                $post_data['producttype'] = $version['versiontype'];
                $post_data['productcode'] = 'wpjobportal';
                $post_data['productversion'] = $version['version'];
                $post_data['JVERSION'] = get_bloginfo('version');
                $post_data['translationcode'] = $lang_name;
                $post_data['method'] = 'getTranslationFile';

                $curl_response = wp_remote_post($url,array('body'=>$post_data));
                if( !is_wp_error($curl_response) && $curl_response['response']['code'] == 200 && isset($curl_response['body']) ){
                    $response = $curl_response['body'];
                    $array = json_decode($response, true);
                    $ret = $this->writeLanguageFile( $final_path , $array['file']);
                    if($ret != false){
                        $url = "https://www.joomsky.com/translations/api/1.0/index.php";
                        $post_data['product'] ='wp-job-portal';
                        $post_data['domain'] = get_site_url();
                        // $post_data['producttype'] = $version['versiontype'];
                        $post_data['productcode'] = 'wpjobportal';
                        $post_data['productversion'] = $version['productversion'];
                        $post_data['JVERSION'] = get_bloginfo('version');
                        $post_data['folder'] = $array['foldername'];
                        $curl_response = wp_remote_post($url,array('body'=>$post_data));
                        $response = $curl_response['body'];
                    }
                    $result['data'] = esc_html(__('File Downloaded Successfully','wp-job-portal'));
                }else{
                    $result['error'] = $curl_response->get_error_message();
                }
            }else{
                $result['error'] = esc_html(__('Unable to connect to server','wp-job-portal'));
            }
        }

        $result = wp_json_encode($result);

        return $result;

    }

    function writeLanguageFile( $path , $url ){
		do_action('wpjobportal_load_wp_admin_file');

		$tmpfile = download_url( $url);
		copy( $tmpfile, $path );
		@wp_delete_file( $tmpfile ); // must wp_delete_file afterwards

        //make mo for po file
        $this->phpmo_convert($path);
        return $result;
    }

    function isConnected(){
        $url = "www.google.com";
        $response = wp_remote_get($url, array('timeout' => 30));
        if (is_wp_error($response)) {
            $is_conn = false; //action in connection failure
        }else{
            $is_conn = true; //action when connected
        }
        return $is_conn;
    }

    function phpmo_convert($input, $output = false) {
        if ( !$output )
            $output = wpjobportalphplib::wpJP_str_replace( '.po', '.mo', $input );
        $hash = $this->phpmo_parse_po_file( $input );
        if ( $hash === false ) {
            return false;
        } else {
            $this->phpmo_write_mo_file( $hash, $output );
            return true;
        }
    }

    function phpmo_clean_helper($x) {
        if (is_array($x)) {
            foreach ($x as $k => $v) {
                $x[$k] = $this->phpmo_clean_helper($v);
            }
        } else {
            if ($x[0] == '"')
                $x = wpjobportalphplib::wpJP_substr($x, 1, -1);
            $x = wpjobportalphplib::wpJP_str_replace("\"\n\"", '', $x);
            $x = wpjobportalphplib::wpJP_str_replace('$', '\\$', $x);
        }
        return $x;
    }
    /* Parse gettext .po files. */
    /* @link http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files */
    function phpmo_parse_po_file($in) {
    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($in)){ return false; }
    $ids = array();
    $strings = array();
    $language = array();
    $lines = file($in);
    foreach ($lines as $line_num => $line) {
        if (wpjobportalphplib::wpJP_strstr($line, 'msgid')){
            $endpos = strrchr($line, '"');
            $id = wpjobportalphplib::wpJP_substr($line, 7, $endpos-2);
            $ids[] = $id;
        }elseif(wpjobportalphplib::wpJP_strstr($line, 'msgstr')){
            $endpos = strrchr($line, '"');
            $string = wpjobportalphplib::wpJP_substr($line, 8, $endpos-2);
            $strings[] = array($string);
        }else{}
    }
    for ($i=0; $i<count($ids); $i++){
        //Shoaib
        if(isset($ids[$i]) && isset($strings[$i])){
            if($entry['msgstr'][0] == '""'){
                continue;
            }
            $language[$ids[$i]] = array('msgid' => $ids[$i], 'msgstr' =>$strings[$i]);
        }
    }
    return $language;
    }
    /* Write a GNU gettext style machine object. */
    /* @link http://www.gnu.org/software/gettext/manual/gettext.html#MO-Files */
    function phpmo_write_mo_file($hash, $out) {
        // sort by msgid
        ksort($hash, SORT_STRING);
        // our mo file data
        $mo = '';
        // header data
        $offsets = array ();
        $ids = '';
        $strings = '';
        foreach ($hash as $entry) {
            $id = $entry['msgid'];
            $str = implode("\x00", $entry['msgstr']);
            // keep track of offsets
            $offsets[] = array (
                            wpjobportalphplib::wpJP_strlen($ids), wpjobportalphplib::wpJP_strlen($id), wpjobportalphplib::wpJP_strlen($strings), wpjobportalphplib::wpJP_strlen($str)
                            );
            // plural msgids are not stored (?)
            $ids .= $id . "\x00";
            $strings .= $str . "\x00";
        }
        // keys start after the header (7 words) + index tables ($#hash * 4 words)
        $key_start = 7 * 4 + sizeof($hash) * 4 * 4;
        // values start right after the keys
        $value_start = $key_start +wpjobportalphplib::wpJP_strlen($ids);
        // first all key offsets, then all value offsets
        $key_offsets = array ();
        $value_offsets = array ();
        // calculate
        foreach ($offsets as $v) {
            list ($o1, $l1, $o2, $l2) = $v;
            $key_offsets[] = $l1;
            $key_offsets[] = $o1 + $key_start;
            $value_offsets[] = $l2;
            $value_offsets[] = $o2 + $value_start;
        }
        $offsets = array_merge($key_offsets, $value_offsets);
        // write header
        $mo .= pack('Iiiiiii', 0x950412de, // magic number
        0, // version
        sizeof($hash), // number of entries in the catalog
        7 * 4, // key index offset
        7 * 4 + sizeof($hash) * 8, // value index offset,
        0, // hashtable size (unused, thus 0)
        $key_start // hashtable offset
        );
        // offsets
        foreach ($offsets as $offset)
            $mo .= pack('i', $offset);
        // ids
        $mo .= $ids;
        // strings
        $mo .= $strings;

        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 );
        }
        $wp_filesystem->put_contents( $out, $mo);
    }

    function updateDate($addon_name,$plugin_version){
        return WPJOBPORTALincluder::getJSModel('premiumplugin')->verfifyAddonActivation($addon_name);
    }

    function getAddonSqlForActivation($addon_name,$addon_version){
        return WPJOBPORTALincluder::getJSModel('premiumplugin')->verifyAddonSqlFile($addon_name,$addon_version);
    }

    function storeOrderingFromPage($data) {//
        if (empty($data)) {
            return false;
        }
        $sorted_array = array();
        wpjobportalphplib::wpJP_parse_str($data['fields_ordering_new'],$sorted_array);
        $sorted_array = reset($sorted_array);
        if(!empty($sorted_array)){
            if($data['ordering_for'] == 'fieldordering'){
                $row = WPJOBPORTALincluder::getJSTable('fieldsordering');
                $ordering_coloumn = 'ordering';
                $msgkey = WPJOBPORTALincluder::getJSModel('fieldordering')->getMessagekey();
            }
            $page_multiplier = 1;
            if($data['pagenum_for_ordering'] > 1){
                $page_multiplier = ($data['pagenum_for_ordering'] - 1) * wpjobportal::$_configuration['pagination_default_page_size'] + 1;
            }
            for ($i=0; $i < count($sorted_array) ; $i++) {
                $row->update(array('id' => $sorted_array[$i], $ordering_coloumn => $page_multiplier + $i));
            }
        }
        WPJOBPORTALMessages::setLayoutMessage(esc_html(__('Ordering updated', 'wp-job-portal')), 'updated', $msgkey);
        return ;
    }

    function checkWPJPAddoneInfo($name){
        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 );
        }

        $slug = $name.'/'.$name.'.php';
        if($wp_filesystem->exists(WP_PLUGIN_DIR . '/'.$slug) && is_plugin_active($slug)){
            $status = __("Activated","wp-job-portal");
            $action = __("Deactivate","wp-job-portal");
            $actionClass = 'wpjp-admin-adons-status-Deactive';
            $url = "plugins.php?s=".$name."&plugin_status=active";
            $disabled = "disabled";
            $class = "js-btn-activated";
            $availability = "-1";
            $version = "";
        }else if($wp_filesystem->exists(WP_PLUGIN_DIR . '/'.$slug) && !is_plugin_active($slug)){
            $status = __("Deactivated","wp-job-portal");
            $action = __("Activate","wp-job-portal");
            $actionClass = 'wpjp-admin-adons-status-Active';
            $url = "plugins.php?s=".$name."&plugin_status=inactive";
            $disabled = "";
            $class = "js-btn-green js-btn-active-now";
            $availability = "1";
            $version = "";
        }else if(!$wp_filesystem->exists(WP_PLUGIN_DIR . '/'.$slug)){
            $status = __("Not Installed","wp-job-portal");
            $action = __("Install Now","wp-job-portal");
            $actionClass = 'wpjp-admin-adons-status-Install';
            $url = esc_url_raw(admin_url("admin.php?page=wpjobportal_premiumplugin&wpjobportallt=step1"));
            $disabled = "";
            $class = "js-btn-install-now";
            $availability = "0";
            $version = "---";
        }
        return array("status" => $status, "action" => $action, "url" => $url, "disabled" => $disabled, "class" => $class, "availability" => $availability, "actionClass" => $actionClass, "version" => $version);
    }

    function downloadandinstalladdonfromAjax(){
        $nonce = WPJOBPORTALrequest::getVar('_wpnonce');
        if (! wp_verify_nonce( $nonce, 'download-and-install-addon') ) {
            die( 'Security check Failed' );
        }

        $key = WPJOBPORTALrequest::getVar('dataFor');
        $installedversion = WPJOBPORTALrequest::getVar('currentVersion');
        $newversion = WPJOBPORTALrequest::getVar('cdnVersion');
        $addon_json_array = array();

        if($key != ''){
            $addon_json_array[] = str_replace('wp-job-portal-', '', $key);
            $plugin_slug = str_replace('wp-job-portal-', '', $key);
        }
        $token = get_option('transaction_key_for_'.$key);
        $result = array();
        $result['error'] = false;
        if($token == ''){
            $result['error'] = esc_html(__('Addon Installation Failed','wp-job-portal'));
            $result = wp_json_encode($result);
            return $result;
        }
        $site_url = site_url();
        if($site_url != ''){
            $site_url = str_replace("https://","",$site_url);
            $site_url = str_replace("http://","",$site_url);
        }
        $url = 'https://wpjobportal.com/setup/index.php?token='.$token.'&productcode='. wp_json_encode($addon_json_array).'&domain='.$site_url;
        // verify token
        $verifytransactionkey = $this->verifytransactionkey($token, $url);
        if($verifytransactionkey['status'] == 0){
            $result['error'] = $verifytransactionkey['message'];
            $result = wp_json_encode($result);
            return $result;
        }
        $install_count = 0;

        $installed = $this->install_plugin($url);
        if ( !is_wp_error( $installed ) && $installed ) {
            // had to run two seprate loops to save token for all the addons even if some error is triggered by activation.
            if(strstr($key, 'wp-job-portal-')){
                update_option('transaction_key_for_'.$key,$token);
            }

            if(strstr($key, 'wp-job-portal-')){
                $activate = activate_plugin( $key.'/'.$key.'.php' );
                $install_count++;
            }

            // run update sql
            if ($installedversion != $newversion) {
                $optionname = 'wpjobportal-addon-'. $plugin_slug .'s-version';
                update_option($optionname, $newversion);
                $plugin_path = WP_CONTENT_DIR;
                $plugin_path = $plugin_path.'/plugins/'.$key.'/includes';
                if(is_dir($plugin_path . '/sql/') && is_readable($plugin_path . '/sql/')){
                    if($installedversion != ''){
                        $installedversion = str_replace('.','', $installedversion);
                    }
                    if($newversion != ''){
                        $newversion = str_replace('.','', $newversion);
                    }
                    WPJOBPORTALincluder::getJSModel('premiumplugin')->getAddonUpdateSqlFromUpdateDir($installedversion,$newversion,$plugin_path . '/sql/');
                    $updatesdir = $plugin_path.'/sql/';
                    if(preg_match('/wp-job-portal-[a-zA-Z]+/', $updatesdir)){
                        $this->wpjpRemoveAddonUpdatesFolder($updatesdir);
                    }
                }else{
                    WPJOBPORTALincluder::getJSModel('premiumplugin')->getAddonUpdateSqlFromLive($installedversion,$newversion,$plugin_slug);
                }
            }

        }else{
            $result['error'] = esc_html(__('Addon Installation Failed','wp-job-portal'));
            $result = wp_json_encode($result);
            return $result;
        }

        $result['success'] = esc_html(__('Addon Installed Successfully','wp-job-portal'));
        $result = wp_json_encode($result);
        return $result;
    }
    function WPJPAddonsAutoUpdate(){
		/*
			code for auto update check from configuration
		*/

        $wpjobportal_addons_auto_update = wpjobportal::$_config->getConfigValue('wpjobportal_addons_auto_update');
        if( $wpjobportal_addons_auto_update != 1){
            return;
        }
		
		require_once WPJOBPORTAL_PLUGIN_PATH.'includes/addon-updater/wpjobportalupdater.php';
		$WP_JOBPORTALUpdater  = new WP_JOBPORTALUpdater();
		$cdnversiondata = $WP_JOBPORTALUpdater->getPluginVersionDataFromCDN();

		$wpjobportal_addons = $this->getWPJPAddonsArray();
		$installed_plugins = get_plugins();
		$need_to_update = array();
		$addon_json_array = array();

        $status_prefix = 'key_status_for_wp-job-portal_';
        foreach ($wpjobportal_addons as $key1 => $value1) {
			$matched = 0;
			$version = "";
			foreach ($installed_plugins as $name => $value) {
				$install_plugin_name = wpjobportalphplib::wpJP_str_replace(".php","",wpjobportalphplib::wpJP_basename($name));
				if($key1 == $install_plugin_name){
					$matched = 1;
					$version = $value["Version"];
					$install_plugin_matched_name = $install_plugin_name;
				}
			}
			if($matched == 1){ //installed
				$name = $key1;
				$title = $value1['title'];
				$cdnavailableversion = "";
                if(is_array($cdnversiondata)){ // log error for null instead of array
    				foreach ($cdnversiondata as $cdnname => $cdnversion) {
    					$install_plugin_name_simple = wpjobportalphplib::wpJP_str_replace("-", "", $install_plugin_matched_name);
    					if($cdnname == wpjobportalphplib::wpJP_str_replace("-", "", $install_plugin_matched_name)){
    						if($cdnversion > $version){ // new version available
    							$status = 'update_available';
    							$cdnavailableversion = $cdnversion;
    							$plugin_slug = wpjobportalphplib::wpJP_str_replace('wp-job-portal-', '', $name);
                                // check key status
                                $token = get_option('transaction_key_for_'.esc_attr($name));
                                $key_local_status = get_option($status_prefix . $token);
                                if($key_local_status == 1){
                                    $need_to_update[] = array("name" => $name, "current_version" => $version, "available_version" => $cdnavailableversion, "plugin_slug" => $plugin_slug );
        							$addon_json_array[] = wpjobportalphplib::wpJP_str_replace('wp-job-portal-', '', $name);
                                }
    						}
    					}
    				}
                }
			}
		}
		$token = "";
		if(is_array($need_to_update)){
			if(isset($need_to_update[0])){
				$key = $need_to_update[0]["name"];
				$token = get_option('transaction_key_for_'.esc_attr($key));
			}
			if($token == ''){
				return;
			}

			$site_url = site_url();
			if($site_url != ''){
				$site_url = wpjobportalphplib::wpJP_str_replace("https://","",$site_url);
				$site_url = wpjobportalphplib::wpJP_str_replace("http://","",$site_url);
			}
			$url = 'https://wpjobportal.com/setup/index.php?token='.esc_attr($token).'&productcode='. wp_json_encode($addon_json_array).'&domain='.$site_url;
			// verify token
			$verifytransactionkey = $this->verifytransactionkey($token, $url);
			if($verifytransactionkey['status'] == 0){
				return;
			}

			$installed = $this->install_plugin($url);
			if ( !is_wp_error( $installed ) && $installed ) {
				// had to run two seprate loops to save token for all the addons even if some error is triggered by activation.

				// run update sql
				foreach($need_to_update AS $update){
					$installedversion = $update["current_version"];
					$newversion = $update["available_version"];
					$plugin_slug = $update["plugin_slug"];
					$key = $update["name"];
					if ($installedversion != $newversion) {
						$optionname = 'wpjobportal-addon-'. $plugin_slug .'s-version';
						update_option($optionname, $newversion);
						$plugin_path = WP_CONTENT_DIR;
						$plugin_path = $plugin_path.'/plugins/'.$key.'/includes';
						if(is_dir($plugin_path . '/sql/') && is_readable($plugin_path . '/sql/')){
							if($installedversion != ''){
								$installedversion = str_replace('.','', $installedversion);
							}
							if($newversion != ''){
								$newversion = str_replace('.','', $newversion);
							}
							WPJOBPORTALincluder::getJSModel('premiumplugin')->getAddonUpdateSqlFromUpdateDir($installedversion,$newversion,$plugin_path . '/sql/');
							$updatesdir = $plugin_path.'/sql/';
							if(preg_match('/wp-job-portal-[a-zA-Z]+/', $updatesdir)){
								$this->wpjpRemoveAddonUpdatesFolder($updatesdir);
							}
						}else{
							WPJOBPORTALincluder::getJSModel('premiumplugin')->getAddonUpdateSqlFromLive($installedversion,$newversion,$plugin_slug);
						}
					}
				}

			}else{
				return;
			}
		}
		return;
    }
    function verifytransactionkey($transactionkey, $url){
        $message = 1;
        if($transactionkey != ''){
            $response = wp_remote_post( $url );
            if( !is_wp_error($response) && $response['response']['code'] == 200 && isset($response['body']) ){
                $result = $response['body'];
                $result = json_decode($result,true);
                if(is_array($result) && isset($result[0]) && $result[0] == 0){
                    $result['status'] = 0;
                } else{
                    $result['status'] = 1;
                }
            }else{
                $result = false;
                if(!is_wp_error($response)){
                   $error = $response['response']['message'];
                }else{
                    $error = $response->get_error_message();
                }
            }
            if(is_array($result) && isset($result['status']) && $result['status'] == 1 ){ // means everthing ok
                $message = 1;
            }else{
                if(isset($result[0]) && $result[0] == 0){
                    $error = $result[1];
                }elseif(isset($result['error']) && $result['error'] != ''){
                    $error = $result['error'];
                }
                $message = 0;
            }
        }else{
            $message = 0;
            $error = esc_html(__('Please insert activation key to proceed','wp-job-portal')).'!';
        }
        $array['data'] = array();
        if ($message == 0) {
            $array['status'] = 0;
            $array['message'] = $error;
        } else {
            $array['status'] = 1;
            $array['message'] = 'success';
        }
        return $array;
    }

    function install_plugin( $plugin_zip ) {

        do_action('wpjobportal_load_wp_admin_file');
        WP_Filesystem();

        $tmpfile = download_url( $plugin_zip);

        if ( !is_wp_error( $tmpfile ) && $tmpfile ) {
            $plugin_path = WP_CONTENT_DIR;
            $plugin_path = $plugin_path.'/plugins/';
            $path = WPJOBPORTAL_PLUGIN_PATH.'addon.zip';

            copy( $tmpfile, $path );

            $unzipfile = unzip_file( $path, $plugin_path);

            @wp_delete_file( $path ); // must wp_delete_file afterwards
            @wp_delete_file( $tmpfile ); // must wp_delete_file afterwards

            if ( is_wp_error( $unzipfile ) ) {
                $result['error'] = esc_html(__('Addon installation failed','wp-job-portal')).'.';
                $result['error'] .= " ".esc_html(wpjobportal::wpjobportal_getVariableValue($unzipfile->get_error_message()));
                $result = wp_json_encode($result);
                return $result;
            } else {
                return true;
            }
        }else{
            $error_string = $tmpfile->get_error_message();
            $result['error'] = esc_html(__('Addon Installation Failed, File download error','wp-job-portal')).'!'.$error_string;
            $result = wp_json_encode($result);
            return $result;
        }
    }

    function wpjpRemoveAddonUpdatesFolder($dir)
    {
        $structure = glob(rtrim($dir, "/") . '/*');
        if (is_array($structure)) {
            foreach ($structure as $file) {
                if (is_dir($file)) {
                    $this->wpjpRemoveAddonUpdatesFolder($file);
                } elseif (is_file($file)) {
                    @wp_delete_file($file);
                }
            }
        }
        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 );
        }

        @$wp_filesystem->rmdir($dir);
    }

    function saveDocumentTitleOptions($data){
        $company_options =  $data['wpjobportal_company_document_title_settings'];
        $job_options =  $data['wpjobportal_job_document_title_settings'];
        $resume_options =  $data['wpjobportal_resume_document_title_settings'];

        update_option( 'wpjobportal_company_document_title_settings', $company_options);
        update_option( 'wpjobportal_job_document_title_settings', $job_options);
        update_option( 'wpjobportal_resume_document_title_settings', $resume_options);

        $error = false;
        // job seo
        if(isset($data['job_seo'])){
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_config` SET `configvalue` = '".esc_sql($data['job_seo'])."' WHERE `configname`= 'job_seo'";
            if (false === wpjobportaldb::query($query)) {
                $error = true;
            }
        }
        // company seo
        if(isset($data['company_seo'])){
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_config` SET `configvalue` = '".esc_sql($data['company_seo'])."' WHERE `configname`= 'company_seo'";
            if (false === wpjobportaldb::query($query)) {
                $error = true;
            }
        }
        // resume seo
        if(isset($data['resume_seo'])){
            $query = "UPDATE `" . wpjobportal::$_db->prefix . "wj_portal_config` SET `configvalue` = '".esc_sql($data['resume_seo'])."' WHERE `configname`= 'resume_seo'";
            if (false === wpjobportaldb::query($query)) {
                $error = true;
            }
        }
        return WPJOBPORTAL_SAVED;
    }

    function wpjobportalCheckLicenseStatus() {
        // Get all distinct transaction keys
        $query = "
            SELECT DISTINCT option_value
            FROM " . wpjobportal::$_db->prefix . "options
            WHERE option_name LIKE 'transaction_key_for_wp-job-portal%'
        ";
        $transaction_keys = wpjobportal::$_db->get_col($query);

        if (empty($transaction_keys)) return;

        $status_prefix = 'key_status_for_wp-job-portal_';
        // $site_url = WPJOBPORTALincluder::getJSModel('wpjobportal')->getSiteUrl();
        $site_url = site_url();
        $site_url = wpjobportalphplib::wpJP_str_replace("https://","",$site_url);
        $site_url = wpjobportalphplib::wpJP_str_replace("http://","",$site_url);

        $show_key_expiry_msg = 0;

        foreach ($transaction_keys as $key) {
            // Build query string for GET request
            $query_args = [
                'token'   => $key,
                'domain'  => $site_url,
                'request' => 'keyexpirycheck'
            ];

            $url = add_query_arg($query_args, 'https://wpjobportal.com/setup/index.php');

            // Perform GET request
            $response = wp_remote_get($url, [ 'timeout' => 15 ]);


            if (is_wp_error($response)) {
                continue; // Skip on error
            }

            $body = wp_remote_retrieve_body($response);
            $data = json_decode($body, true);


            if (!is_array($data) || !isset($data['status'])) {
                continue; // Invalid response
            }

            // Save status
            update_option($status_prefix . $key, $data['status'], false);

            // Save expiry date if available
            if ($data['status'] == 1 && !empty($data['expirydate'])) {
                if (strtotime(current_time('mysql')) > strtotime($data['expirydate'])) {
                    $show_key_expiry_msg = 1;
                }
            } else {
                $show_key_expiry_msg = 1;
            }
        }

        update_option('wpjobportal_show_key_expiry_msg', $show_key_expiry_msg, false);
    }

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

?>

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