db = $db; if (ctype_digit((string)$value)) { $this->id = (int)$value; return $this->load_from_id(); } else { $this->slug = $value; return $this->load_from_slug(); } } private function load_from_id(): bool { $socials = []; $dj = $this->get_dj_by_id($this->id); return $this->build_dj($dj); } private function get_dj_by_id() { $stmt = $this->db->prepare("SELECT * FROM djs WHERE id = ?"); $stmt->bind_param("i", $this->id); $stmt->execute(); $result = $stmt->get_result(); $dj = $result->fetch_assoc(); $stmt->close(); return $dj; } /** * @param $dj * @return bool */ private function build_dj($dj): bool { if ($dj) { if (isset($dj['id'])) { $this->id = $dj['id']; } if (isset($dj['name'])) { $this->name = $dj['name']; } if (isset($dj['bio'])) { $this->bio = $dj['bio']; } if (isset($dj['slug'])) { $this->slug = $dj['slug']; } if (isset($dj['img'])) { // is this legacy code? // the code is legacy if it starts with /dj/, // if it does, prefix with https://www.utahsdjs.com if (substr($dj['img'], 0, 5) == "/djs/") { // remove /djs/ from the string $dj['img'] = substr($dj['img'], 4); $this->img = "https://cdn.utahsdjs.com" . $dj['img']; } else { $this->img = $dj['img']; } } if (isset($dj['email'])) { $this->email = $dj['email']; } if (isset($dj['facebook_url'])) { $this->socials['facebook'] = $dj['facebook_url']; } if (isset($dj['instagram_url'])) { $this->socials['instagram'] = $dj['instagram_url']; } if (isset($dj['twitter_url'])) { $this->socials['twitter'] = $dj['twitter_url']; } if (isset($dj['myspace_url'])) { $this->socials['myspace'] = $dj['myspace_url']; } if (isset($dj['soundcloud_url'])) { $this->socials['soundcloud'] = $dj['soundcloud_url']; } if (isset($dj['mixcloud_url'])) { $this->socials['mixcloud'] = $dj['mixcloud_url']; } if (isset($dj['spotify_url'])) { $this->socials['spotify'] = $dj['spotify_url']; } if (isset($dj['active'])) { $this->active = $dj['active']; } if (isset($dj['claimed_by']) && $dj['claimed_by'] != null) { // TODO: pull some quick data on the user who claimed this DJ $this->claimed = true; } if (isset($dj['created'])) { $this->created = $dj['created']; } if (isset($dj['lastupdated'])) { $this->updated = $dj['lastupdated']; } $this->load_dj_mixes(); return true; } else { return false; } } private function load_from_slug(): bool { $socials = []; $dj = $this->get_dj_by_slug($this->slug); return $this->build_dj($dj); } private function get_dj_by_slug($slug) { $stmt = $this->db->prepare("SELECT * FROM djs WHERE slug = ?"); $stmt->bind_param("s", $slug); $stmt->execute(); $result = $stmt->get_result(); $dj = $result->fetch_assoc(); $stmt->close(); return $dj; } public function get_slug(): string { return $this->slug; } public function get_id(): int { return $this->id; } public function get_name(): string { return $this->name; } public function get_bio(): string { return $this->bio; } public function get_img(): string { return $this->img; } public function get_active(): bool { return $this->active; } public function get_email(): string { return $this->email; } public function get_socials(): array { return $this->socials; } public function get_created(): string { return $this->created; } public function get_updated(): string { return $this->updated; } public function get_claimed(): bool { return $this->claimed; } private function load_dj_mixes(): void { $stmt = $this->db->prepare("SELECT * FROM mix WHERE dj1 = ? OR dj2 = ? OR dj3 = ?"); $stmt->bind_param("iii", $this->id, $this->id, $this->id); $stmt->execute(); $result = $stmt->get_result(); $mixes = []; while ($mix = $result->fetch_assoc()) { $mixes[] = $mix; } $stmt->close(); $this->mixes = $mixes; } public function get_dj_mixes() { return $this->mixes; } }