api = new WoWAudit(null, $key); } private function sortRoles($a, $b) { switch ($a->role) { case 'Tank': $asort = 0; break; case 'Heal': $asort = 1; break; case 'Ranged': $asort = 2; break; case 'Melee': $asort = 3; break; default: $asort = 4; break; } switch ($b->role) { case 'Tank': $bsort = 0; break; case 'Heal': $bsort = 1; break; case 'Ranged': $bsort = 2; break; case 'Melee': $bsort = 3; break; default: $bsort = 4; break; } return $asort - $bsort; } public function sync($force = false) { if (!empty($this->id_wowaudit)) { $raid = (object)$this->api->getRaid($this->id_wowaudit, $force); if (!empty($raid->id)) { if ($this->title && $raid->instance == "Custom") { //Titel nur sezten wenn kein Custom Raid } else { $this->title = $raid->instance; } $this->start = $raid->date . " " . $raid->start_time; $this->end = $raid->date . " " . $raid->end_time; $this->difficulty = $raid->difficulty; $this->status = $raid->status; $encounters = $raid->encounters; $partial = false; $signups = []; $sup = []; foreach ($encounters as $key => &$encounter) { $partial = $encounter['enabled'] || $partial; if (empty($encounter['selections'])) { $encounter['selections'] = []; } $encounters[$key]['selections'] = collect($encounter['selections']); } $this->partial = $partial; foreach ($raid->signups as $signup) { $character = Character::whereName($signup['character']['name'])->whereRealm($signup['character']['realm'])->first(); if (empty($character)) { $character = new Character(); $character->name = $signup['character']['name']; $character->realm = $signup['character']['realm']; $character->updateFromAPI(); } if ($character->class != $signup['class']) { if (!empty($character->user)) { $newchar = $character->user->characters()->where('class', $signup['class'])->first(); if (!empty($newchar->ID)) { $character = $newchar; } } } $character->id_wowaudit = $signup['character']['id']; $character->save(); $sup[$character->id_wowaudit] = $signup['status']; $s = new Signup(); $s->character_id = $character->ID; $s->raid_id = $this->ID; if ($this->partial) { foreach ($encounters as $encounter) { if ($signup['selected']) break; if (empty($encounter['selections'])) continue; foreach ($encounter['selections'] as $selection) { if ($selection['character_id'] == $signup['character']['id']) { $signup['selected'] = $selection['selected'] || $signup['selected']; if ($signup['selected']) { break 2; } } } } } $s->comment = $signup['comment']; $s->status = $signup['selected'] ? "Selected" : $signup['status']; $s->role = $signup['status'] == "Unknown" ? "Unknown" : $signup['role']; $signups[] = $s; } $this->signups = collect($signups); foreach ($encounters as &$encounter) { foreach ($encounter['selections'] as $key => &$selection) { $character = Character::where('id_wowaudit', $selection['character_id'])->first(); $selection['status'] = $sup[$character->id_wowaudit]; $s = new Signup(); $s->character_id = $character->ID; $s->raid_id = $this->ID; $s->boss_id = $encounter['id']; $s->status = $selection['selected'] ? "Selected" : $selection['status']; $s->role = $selection['role']; $encounter['selections'][$key] = $s; } } array_unshift($encounters, [ 'name' => "Alle Bosse", 'id' => 0, 'enabled' => true, 'notes' => $raid->notes, 'selections' => $this->signups, ]); foreach ($encounters as &$encounter) { $encounter['selections'] = collect($encounter['selections'])->sortBy([fn ($a, $b) => $this->sortRoles($a, $b), 'character_id']); } $this->encounters = collect($encounters); } else { return false; } } return $this; } public function setTitle($title) { $this->title = $title; $this->save(); } public function getColorAttribute($type = "") { switch ($this->difficulty) { case 'Normal': return "shaman"; case 'Heroic': return "warlock"; case 'Mythic': return "deathknight"; case 'Teamspeak': return "hunter"; default: return "priest"; } } public function getLinkAttribute() { return "/raid/" . $this->ID; } public function getPreviousAttribute() { $previous = Raid::where('start', '<', $this->start)->orderBy('start', 'DESC')->first(); return $previous; } public function getThumbnailAttribute() { $clean_name = str_replace([" ", "'"], "-", $this->title); $clean_name = preg_replace('/[^a-zA-Z0-9_-]/', '', $clean_name); $clean_name = strtolower($clean_name); $url = "https://data.wowaudit.com/img/$clean_name-small.jpeg"; list($status) = get_headers($url); if (strpos($status, '404') !== FALSE) { return "https://data.wowaudit.com/img/custom-small.jpeg"; } return $url; } public function getNextAttribute() { $next = Raid::where('start', '>', $this->start)->orderBy('start', 'ASC')->first(); return $next; } public function showSignup($character, $showRole = false, $showStatus = false, $vertical = false) { $u = $character->user; if (!empty($u->ID)) { $chars = $u->characters; } else { $chars = [$character]; } if (!empty($this->id_wowaudit)) $this->sync(); if (!empty($character->ID) && !empty($this->signups)) { foreach ($this->signups as $signup) { foreach ($chars as $character) { if ($signup->character->ID == $character->ID) { return $signup->showForm($showRole, $showStatus, $vertical); } } } } $s = new Signup(); $s->raid_id = $this->ID; $s->character_id = $character->ID; return $s->showForm($showRole, $showStatus, $vertical); } }