/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $user_id = auth()->user()->id; // For some fail reson I cant get the UserRepository trait // to be happy here. // TODO: Fix that! $allowed_main_character_ids = implode(',', ApiKeyInfoCharacters::with('key')->whereHas('key', function ($query) use($user_id) { $query->where('user_id', $user_id); })->pluck('characterID')->toArray()); $allowed_skins = implode(',', Profile::$options['skins']); $allowed_languages = implode(',', array_map(function ($entry) { return $entry['short']; }, config('web.locale.languages'))); $allowed_sidebar = implode(',', Profile::$options['sidebar']); return ['main_character_id' => 'required|in:' . $allowed_main_character_ids, 'skin' => 'required|in:' . $allowed_skins, 'language' => 'required|in:' . $allowed_languages, 'sidebar' => 'required|in:' . $allowed_sidebar, 'thousand_seperator' => 'in:" ",",","."|size:1', 'decimal_seperator' => 'required|in:",","."|size:1', 'email_notifications' => 'required|in:yes,no', 'require_mfa' => 'required|in:yes,no']; }
/** * Query the database for characters, keeping filters, * permissions and affiliations in mind * * @param bool $get * * @return $this|\Illuminate\Database\Eloquent\Collection|static[] */ public function getAllCharactersWithAffiliations(bool $get = true) { // Get the User for permissions and affiliation // checks $user = auth()->user(); $characters = ApiKeyInfoCharacters::with('key', 'key.owner', 'key_info')->join('account_api_key_infos', 'account_api_key_infos.keyID', '=', 'account_api_key_info_characters.keyID')->join('eve_api_keys', 'eve_api_keys.key_id', '=', 'account_api_key_info_characters.keyID')->join('eve_character_infos', 'eve_character_infos.characterID', '=', 'account_api_key_info_characters.characterID')->where('account_api_key_infos.type', '!=', 'Corporation'); // If the user is a super user, return all if (!$user->hasSuperUser()) { $characters = $characters->where(function ($query) use($user) { // If the user has any affiliations and can // list those characters, add them if ($user->has('character.list', false)) { $query = $query->whereIn('account_api_key_info_characters.characterID', array_keys($user->getAffiliationMap()['char'])); } // Add any characters from owner API keys $query->orWhere('eve_api_keys.user_id', $user->id); }); } if ($get) { return $characters->groupBy('account_api_key_info_characters.characterID')->orderBy('account_api_key_info_characters.characterName')->get(); } return $characters; }
/** * Query the databse for characters, keeping filters, * permissions and affiliations in mind * * @param \Illuminate\Http\Request|null $request * * @return \Illuminate\Database\Eloquent\Builder|mixed|static */ public function getAllCharactersWithAffiliationsAndFilters(Request $request = null) { // Get the User for permissions and affiliation // checks $user = auth()->user(); $characters = ApiKeyInfoCharacters::with('key', 'key.owner', 'key_info')->join('account_api_key_infos', 'account_api_key_infos.keyID', '=', 'account_api_key_info_characters.keyID')->join('eve_api_keys', 'eve_api_keys.key_id', '=', 'account_api_key_info_characters.keyID')->join('eve_character_infos', 'eve_character_infos.characterID', '=', 'account_api_key_info_characters.characterID')->where('account_api_key_infos.type', '!=', 'Corporation'); // Apply any received filters if ($request && $request->filter) { $characters = $this->where_filter($characters, $request->filter, config('web.filter.rules.characters')); } // If the user is a super user, return all if (!$user->hasSuperUser()) { $characters = $characters->where(function ($query) use($user, $request) { // If the user has any affiliations and can // list those characters, add them if ($user->has('character.list', false)) { $query = $query->whereIn('account_api_key_info_characters.characterID', array_keys($user->getAffiliationMap()['char'])); } // Add any characters from owner API keys $query->orWhere('eve_api_keys.user_id', $user->id); }); } return $characters->groupBy('account_api_key_info_characters.characterID')->orderBy('account_api_key_info_characters.characterName')->get(); }
/** * @param $user_id * * @return \Illuminate\Database\Eloquent\Collection|static[] */ public function getUserCharacters($user_id) { return ApiKeyInfoCharacters::with('key')->whereHas('key', function ($query) use($user_id) { $query->where('user_id', $user_id); })->get(); }