/** * Check if current user is authorized against a group and a facultative action * @param string $group Group of user : admin, ce, orga, referral, student * @param string $action Specific action for this group of user * * @return bool */ public function can($group, $action = '') { if ($group == 'newcomer') { // Check if newcomer is identified if (!Auth::check() || !Auth::user() instanceof Newcomer) { return false; } // Action verification $count = Newcomer::where('wei', 1)->count(); switch ($action) { case 'wei': if (!Auth::user()->wei && ($this->now() <= new \DateTime(Config::get('services.wei.registrationStart')) || $this->now() >= new \DateTime(Config::get('services.wei.registrationEnd')) || $count >= Config::get('services.wei.newcomerMax'))) { return false; } break; } } else { // Login/student verification if (in_array($group, ['student', 'admin', 'orga', 'ce', 'referral', 'volunteer', 'moderator']) && !\EtuUTT::isAuth()) { return false; } $student = \EtuUTT::student(); // Volunteer verification if (in_array($group, ['admin', 'orga', 'ce', 'volunteer', 'moderator']) && !\EtuUTT::student()->volunteer) { return false; } // Group verification if ($group == 'admin' && !$student->isAdmin()) { return false; } // Group verification if ($group == 'moderator' && !$student->isAdmin() && !$student->isModerator()) { return false; } // Group verification if ($group == 'referral' && !$student->referral) { return false; } elseif ($group == 'orga' && !$student->orga) { return false; } elseif ($group == 'ce' && !$student->ce) { return false; } $teamCount = Team::count(); // Action verification if ($group == 'ce') { switch ($action) { case 'inTeam': if (!$student->team) { return false; } break; case 'respo': if (!$student->team || $student->team->respo_id != $student->student_id) { return false; } break; case 'create': if ($this->now() > new \DateTime(Config::get('services.ce.deadline')) || $teamCount >= Config::get('services.ce.maxteam') || $student->team) { return false; } break; case 'edit': if (!$student->team || $student->team->respo_id != $student->student_id || $this->now() > new \DateTime(Config::get('services.ce.deadline'))) { return false; } case 'join': if (!$student->team || $this->now() > new \DateTime(Config::get('services.ce.deadline'))) { return false; } break; } } elseif ($group == 'student') { switch ($action) { case 'referral': if ($this->now() > new \DateTime(Config::get('services.referral.deadline')) || $student->referral_validated || $student->referral) { return false; } break; case 'ce': if ($this->now() > new \DateTime(Config::get('services.ce.deadline')) || $teamCount >= Config::get('services.ce.maxteam') || $student->ce) { return false; } break; } } elseif ($group == 'referral') { switch ($action) { case 'edit': if ($this->now() > new \DateTime(Config::get('services.referral.deadline')) || $student->referral_validated) { return false; } break; } } } return true; }
/** * List all the teams and show a creation form. * * @return Response */ public function teamList() { return View::make('dashboard.ce.teamlist', ['teams' => Team::all(), 'teamLeft' => Config::get('services.ce.maxteam') - Team::count()]); }
/** * Sort of menu for the user. * * @return Response */ public function getMenu() { return View::make('menu')->with(['student' => EtuUTT::student(), 'teamLeft' => Config::get('services.ce.maxteam') - Team::count()]); }