ifnews2/app/Models/Game.php

105 lines
3 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Author;
use App\Models\Language;
use App\Models\Tag;
use App\Models\Platform;
use App\Events\GameSaving;
class Game extends Model
{
protected $table = 'games';
public $guarded = ['id'];
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function booted()
{
static::saving(function (Game $game) {
// Replace non-breaking space with regular one
$game->title = str_replace([' ','&nbsp;'], ' ', $game->title);
$game->title = preg_replace('/\s+/', ' ', $game->title);
$game->title = trim($game->title);
// strip quotes
$game->title = trim($game->title,'"');
$game->title = trim($game->title,"'");
if (isset($game->description)) {
$game->description = $game->normalizeDescription($game->description);
}
if (isset($game->short_description)) {
$game->short_description = $game->normalizeDescription($game->short_description);
}
});
}
public function authors() {
return $this->belongsToMany(Author::class, 'authors_games', 'game_id', 'author_id');
}
public function languages() {
return $this->belongsToMany(Language::class, 'languages_games');
}
public function tags() {
return $this->belongsToMany(Tag::class, 'tags_games');
}
public function platforms() {
return $this->belongsToMany(Platform::class, 'games_platforms', 'game_id', 'platform_id');
}
public function printShort() {
echo '#'.$this->id.' ';
$names = [];
foreach ($this->authors as $author) {
$names[] = $author->name;
}
echo implode(', ', $names);
echo ' «'.$this->title.'»'.PHP_EOL;
if (!empty($this->short_description)) {
$this->short_description = $this->normalizeDescription($this->short_description);
$lines = explode("\n", $this->short_description);
foreach ($lines as $line) {
echo '> '.$line.PHP_EOL;
}
}
}
public function printDetailed() {
$this->printShort();
echo _('Released').': '.$this->release_date.PHP_EOL;
if (!empty($this->description)) {
echo $this->normalizeDescription($this->description);
}
}
public function normalizeDescription($description) {
$description = str_replace(' ', ' ', $description);
$description = str_replace('...','…',$description);
$description = str_replace('\r','',$description);
$description = str_replace(['<br>', '<br/>', '<br />'], "\n", $description);
$description = htmlentities(html_entity_decode($description));
$description = preg_replace('/[ ]+/', ' ', $description);
$lines = explode("\n", $description);
$lines = array_map('trim', $lines);
$out = implode("\n", $lines);
return $out;
}
public function guessPlatform() {
foreach($this->tags as $tag) {
$platform = Platform::findByName($tag->title, false);
if ($platform) {
$this->platforms()->attach($platform);
break;
}
}
}
}