Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- Really expensive algorithm
- */
- /**
- * Get all project vacancies
- *
- * @return Collection of project vacancies
- */
- public function projectVacancies()
- {
- $vacancies = ProjectVacancy::available()->with('role', 'project')->get();
- return $vacancies->map(function ($item) {
- return "{$item->project_id},{$item->project_role_id}";
- })->unique()->values()->map(function ($item) use ($vacancies) {
- $ids = explode(',', $item);
- $project_id = (int) $ids[0];
- $project_role_id = (int) $ids[1];
- return $vacancies->first(function ($vacancy) use ($project_id, $project_role_id) {
- return $vacancy->project_id === $project_id && $vacancy->project_role_id === $project_role_id;
- });
- });
- }
- /**
- Hash table implementation
- */
- /**
- * Process vacancies (group by project&role, Caertification)
- *
- * @param array $vacancies
- * @return array
- */
- public function processVacancies($vacancies, $projects = true)
- {
- return $vacancies->reduce(function ($formatedVacancies, $vacancy) use ($projects){
- $formatedVacancies = $formatedVacancies ?: [];
- $groupId = $projects ? "{$vacancy->project_id}-{$vacancy->project_role_id}" : "{$vacancy->certification_id}";
- $formatedVacancy = $vacancy->toArray();
- if($projects) {
- unset($formatedVacancy['project']);
- unset($formatedVacancy['role']);
- }else {
- unset($formatedVacancy['certification']);
- }
- if (array_key_exists($groupId, $formatedVacancies)) {
- $key = $projects ? 'vacancies' : 'certification';
- array_push($formatedVacancies[$groupId][$key], $formatedVacancy);
- } else if($projects){
- $formatedVacancies[$groupId]['project'] = $vacancy->project->toArray();
- $formatedVacancies[$groupId]['role'] = $vacancy->role->toArray();
- $formatedVacancies[$groupId]['vacancies'] = [$formatedVacancy];
- $formatedVacancies[$groupId]['available_slots'] = 0;
- } else {
- $formatedVacancies[$groupId]['certification'] = $vacancy->certification->toArray();
- $formatedVacancies[$groupId]['available_slots'] = 0;
- }
- if (! $vacancy->fellow_id) {
- $formatedVacancies[$groupId]['available_slots']++;
- }
- return $formatedVacancies;
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement