WowPress-Tailwind/theme/wowpress/Models/Character.php

165 lines
4.9 KiB
PHP

<?php
namespace WoWPress\Models;
use Wenprise\Eloquent\Model;
use WoWPress\Api\BattleNet;
class Character extends Model
{
protected $table = "wowpress_characters";
public $timestamps = false;
protected $primaryKey = 'ID';
protected $guarded = ['ID'];
private $api;
public function __construct($attrs = [])
{
parent::__construct($attrs);
$options = get_option('wowpress_api');
if(isset($options['bnet'])){
$key = get_option('wowpress_api')['bnet']['key'];
$id = get_option('wowpress_api')['bnet']['id'];
}else{
return false;
}
$this->api = new BattleNet($id,$key);
}
public function lists(){
return $this->belongsToMany(CharacterList::class,'wowpress_charlists_item','list_id','character_id')->withPivot('comment','date','id');
}
public function user(){
return $this->belongsTo(User::class);
}
public function getCanEditAttribute(){
if(empty($this->user->ID)){
return current_user_can('wowpress_edit_raids');
}
return current_user_can('wowpress_edit_raids') || (get_current_user_id() == $this->user->ID);
}
public function sanitize($string,$delimiter_space="")
{
$string = strtolower(str_replace(" ", $delimiter_space, $string));
$string = strtolower(str_replace("'", "", $string));
return $string;
}
public function getRankAttribute($rank){
switch($rank){
case 0: return "Gildenmeister";
break;
case 1: return "Offizier";
break;
case 2: return "Offi-Twink";
break;
case 3: return "Raidlead";
break;
case 4: return "Ehrenmitglied";
break;
case 5: return "Raider";
break;
case 6: return "Raider-Twink";
break;
case 7: return "F&F";
break;
case 8: return "Novize";
break;
case 9: return "Sleeper";
break;
default: return "Gast";
}
}
public function getColorAttribute()
{
return $this->sanitize($this->class);
}
public function getClassIconAttribute()
{
$classname = $this->sanitize($this->class);
return get_template_directory_uri() . "/icons/class/$classname/$classname.png";
}
public static function classIconLink($class){
$classname = (new self())->sanitize($class);
return get_template_directory_uri() . "/icons/class/$classname/$classname.png";
}
public function getSpecIconAttribute()
{
$classname = $this->sanitize($this->class);
$specname = $this->sanitize($this->spec);
return get_template_directory_uri() . "/icons/class/$classname/$specname.png";
}
public static function specIconLink($class,$spec){
$classname = (new self())->sanitize($class);
$specname = (new self())->sanitize($spec);
return get_template_directory_uri() . "/icons/class/$classname/$specname.png";
}
public function updateFromAPI()
{
$realm = $this->sanitize($this->realm,"-");
$char_from_api = $this->api->getCharacter($this->name,$realm);
if(!array_key_exists('character_class',$char_from_api)){
return false;
}
$this->class = $char_from_api['character_class']['name'];
$this->spec = $char_from_api['active_spec']['name'];
$this->id_blizz = $char_from_api['id'];
$guild_data = $this->api->getGuildRank($this->name,$realm);
if(!empty($guild_data['rank'])){
$this->guild = $guild_data['guild'];
$this->rank = $guild_data['rank'];
}else{
$this->rank = 99;
}
$this->save();
return $char_from_api;
}
public function updateMedia($force = false){
if(empty($this->id_blizz)){
return false;
}
$character_dir = wp_upload_dir()['basedir']."/characters/".$this->ID."/";
if(!is_dir($character_dir)){
mkdir($character_dir,0777,true);
}
$id = $this->id_blizz;
$mod = $id % 256;
$realm = $this->sanitize($this->realm,'-');
$img_url = "https://render.worldofwarcraft.com/eu/character/$realm/$mod/$id-avatar.jpg";
file_put_contents($character_dir."avatar.jpg",file_get_contents($img_url));
}
public function getAvatarAttribute(){
$character_dir = wp_upload_dir()['basedir']."/characters/".$this->ID."/avatar.jpg";
$character_dir_uri = wp_upload_dir()['baseurl']."/characters/".$this->ID."/avatar.jpg";
if(file_exists($character_dir)){
return $character_dir_uri;
}else{
return "";
}
}
public function getClassButtonAttribute(){
require(get_template_directory()."/template-parts/components/class-button.php");
}
}