示例#1
0
 public function getScoreAttribute()
 {
     $totalScore = \parser\models\JobRequirement::where('job_id', '=', $this->job_id)->where('is_available', '=', 1)->sum('weightage');
     $score = \parser\models\JobRequirement::where('is_available', '=', 1)->where('job_id', '=', $this->job_id)->WhereIn('keyword_id', function ($query) {
         $query->select('id')->from('keywords')->whereIn('id', function ($query2) {
             $query2->select('keyword_id')->from('application_keywords')->where('application_id', '=', $this->id);
         });
     })->sum('weightage');
     $unfulfilled_requirements = \parser\models\JobRequirement::where('is_available', '=', 1)->where('job_id', '=', $this->job_id)->WhereNotIn('keyword_id', function ($query) {
         $query->select('id')->from('keywords')->whereIn('id', function ($query2) {
             $query2->select('keyword_id')->from('application_keywords')->where('application_id', '=', $this->id);
         });
     })->get();
     $skillset = [];
     foreach ($this->resumeKeywords as $keyword) {
         array_push($skillset, $keyword->keyword->id);
     }
     $edges = \parser\models\KeywordRelevance::get();
     $graph = new \parser\library\Graph();
     foreach ($edges as $edge) {
         $graph->addEdge($edge->from_keyword_id, $edge->to_keyword_id, $edge->relevance);
     }
     $sssp = new \parser\library\Dijkstra($graph->output());
     foreach ($unfulfilled_requirements as $requirement) {
         $min = 1;
         foreach ($skillset as $skill) {
             $dist = -$sssp->shortestPath($skill, $requirement->keyword->id);
             if ($dist < $min) {
                 $min = $dist;
             }
         }
         if ($min != 1) {
             $score += $requirement->weightage * abs($min);
         }
     }
     if ($totalScore <= 0) {
         return 0;
     }
     return $score / $totalScore * 100;
 }
示例#2
0
 public static function updateRequirements($job_id)
 {
     $app = \Slim\Slim::getInstance();
     if (!\parser\controllers\ApplicationController::isLogin()) {
         $app->render(401, ['Status' => 'Unauthorised.']);
         return;
     }
     $allPostVars = $app->request->post();
     $id = @$allPostVars['id'] ? @trim(htmlspecialchars($allPostVars['id'], ENT_QUOTES, 'UTF-8')) : NULL;
     $keyword = @$allPostVars['keyword'] ? @trim(htmlspecialchars($allPostVars['keyword'], ENT_QUOTES, 'UTF-8')) : NULL;
     $weightage = isset($allPostVars['weightage']) ? @floatval($allPostVars['weightage']) : NULL;
     $is_required = @$allPostVars['is_required'] === "on" ? true : false;
     $is_available = @$allPostVars['is_available'] === "on" ? true : false;
     if (!preg_match('/^\\d+$/', $id) || !preg_match('/^\\d+(.\\d{1,2})?$/', $weightage) || !InputValidator::isValidStringInput($keyword, 255, 0)) {
         $app->render(400, ['Status' => 'Invalid input.']);
         return;
     }
     try {
         $user = \parser\models\User::where('email', '=', $_SESSION['email'])->first();
         $job = \parser\models\Job::where('id', '=', $job_id)->whereIn('id', function ($query) use($user) {
             $query->select('job_id')->from('job_recruiters')->where('user_id', '=', $user->id);
         })->first();
         if ($user && $job) {
             $keyword = \parser\models\Keyword::firstOrCreate(array('keyword' => $keyword));
             $requirement = \parser\models\JobRequirement::where('id', '=', $id)->where('job_id', '=', $job->id)->first();
             if ($requirement) {
                 $requirement->keyword_id = $keyword->id;
                 $requirement->weightage = $weightage;
                 $requirement->is_required = $is_required;
                 $requirement->is_available = $is_available;
                 $requirement->save();
                 echo json_encode($requirement, JSON_UNESCAPED_SLASHES);
             } else {
                 $app->render(401, ['Status' => 'Unauthorised.']);
                 return;
             }
         } else {
             $app->render(401, ['Status' => 'Unauthorised.']);
             return;
         }
     } catch (\Exception $e) {
         $app->render(500, ['Status' => 'An error occurred.']);
         return;
     }
 }