2018-01-29 12:41:57 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App;
|
|
|
|
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2018-02-01 23:10:08 +00:00
|
|
|
use Symfony\Component\ClassLoader\ClassMapGenerator;
|
2018-02-03 15:46:14 +00:00
|
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
2018-10-14 16:27:28 +00:00
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
use App\User;
|
2018-01-29 12:41:57 +00:00
|
|
|
|
|
|
|
class Item extends Model
|
|
|
|
{
|
2018-02-03 15:46:14 +00:00
|
|
|
use SoftDeletes;
|
|
|
|
|
2018-10-14 16:27:28 +00:00
|
|
|
protected static function boot()
|
|
|
|
{
|
|
|
|
parent::boot();
|
|
|
|
|
|
|
|
static::addGlobalScope('user_id', function (Builder $builder) {
|
|
|
|
$current_user = User::currentUser();
|
|
|
|
$builder->where('user_id', $current_user->id);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2018-01-29 12:41:57 +00:00
|
|
|
//
|
2018-02-01 14:45:59 +00:00
|
|
|
protected $fillable = [
|
2018-10-23 14:53:56 +00:00
|
|
|
'title', 'url', 'colour', 'icon', 'description', 'pinned', 'order', 'type', 'class', 'user_id'
|
2018-02-01 14:45:59 +00:00
|
|
|
];
|
2018-02-01 23:10:08 +00:00
|
|
|
|
2018-02-03 15:46:14 +00:00
|
|
|
/**
|
|
|
|
* The attributes that should be mutated to dates.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
protected $dates = ['deleted_at'];
|
|
|
|
|
2018-02-03 00:22:42 +00:00
|
|
|
/**
|
|
|
|
* Scope a query to only include pinned items.
|
|
|
|
*
|
|
|
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
|
|
|
* @return \Illuminate\Database\Eloquent\Builder
|
|
|
|
*/
|
|
|
|
public function scopePinned($query)
|
|
|
|
{
|
|
|
|
return $query->where('pinned', 1);
|
|
|
|
}
|
2018-02-06 20:41:29 +00:00
|
|
|
|
2018-02-08 20:58:07 +00:00
|
|
|
public static function checkConfig($config)
|
|
|
|
{
|
|
|
|
if(empty($config)) {
|
|
|
|
$config = null;
|
|
|
|
} else {
|
|
|
|
$store = false;
|
2018-02-09 00:05:37 +00:00
|
|
|
//die(var_dump($config));
|
2018-02-08 20:58:07 +00:00
|
|
|
foreach($config as $key => $check) {
|
|
|
|
if($key == 'type') continue;
|
2018-02-09 00:05:37 +00:00
|
|
|
if($key == 'dataonly') continue;
|
|
|
|
if(!empty($check) && $check != '0') {
|
2018-02-08 20:58:07 +00:00
|
|
|
$store = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2018-02-09 00:05:37 +00:00
|
|
|
//die(var_dump($store))
|
2018-06-05 16:18:49 +00:00
|
|
|
|
2018-02-08 20:58:07 +00:00
|
|
|
$config['enabled'] = ($store) ? true : false;
|
|
|
|
$config = json_encode($config);
|
|
|
|
}
|
|
|
|
return $config;
|
|
|
|
|
|
|
|
}
|
2018-02-17 00:13:38 +00:00
|
|
|
|
|
|
|
public function parents()
|
|
|
|
{
|
|
|
|
return $this->belongsToMany('App\Item', 'item_tag', 'item_id', 'tag_id');
|
|
|
|
}
|
|
|
|
public function children()
|
|
|
|
{
|
|
|
|
return $this->belongsToMany('App\Item', 'item_tag', 'tag_id', 'item_id');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getLinkAttribute()
|
|
|
|
{
|
|
|
|
if((int)$this->type === 1) {
|
|
|
|
return '/tag/'.$this->url;
|
|
|
|
} else {
|
|
|
|
return $this->url;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getDroppableAttribute()
|
|
|
|
{
|
|
|
|
if((int)$this->type === 1) {
|
|
|
|
return ' droppable';
|
|
|
|
} else {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-19 23:15:09 +00:00
|
|
|
public function getLinkTargetAttribute()
|
2018-02-17 00:13:38 +00:00
|
|
|
{
|
2018-06-07 21:35:01 +00:00
|
|
|
$target = Setting::fetch('window_target');
|
|
|
|
|
|
|
|
if((int)$this->type === 1 || $target === 'current') {
|
2018-02-17 00:13:38 +00:00
|
|
|
return '';
|
|
|
|
} else {
|
2018-06-07 16:17:08 +00:00
|
|
|
return ' target="' . $target . '"';
|
2018-02-17 00:13:38 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-18 17:04:18 +00:00
|
|
|
public function getLinkIconAttribute()
|
|
|
|
{
|
|
|
|
if((int)$this->type === 1) {
|
|
|
|
return 'fa-tag';
|
|
|
|
} else {
|
|
|
|
return 'fa-arrow-alt-to-right';
|
|
|
|
}
|
|
|
|
}
|
2018-02-18 17:23:05 +00:00
|
|
|
public function getLinkTypeAttribute()
|
|
|
|
{
|
|
|
|
if((int)$this->type === 1) {
|
|
|
|
return 'tags';
|
|
|
|
} else {
|
|
|
|
return 'items';
|
|
|
|
}
|
|
|
|
}
|
2018-02-18 17:04:18 +00:00
|
|
|
|
2018-11-06 14:52:45 +00:00
|
|
|
public static function nameFromClass($class)
|
|
|
|
{
|
|
|
|
$explode = explode('\\', $class);
|
|
|
|
$name = end($explode);
|
|
|
|
|
|
|
|
return $name;
|
|
|
|
}
|
|
|
|
|
2018-02-17 00:13:38 +00:00
|
|
|
public function scopeOfType($query, $type)
|
|
|
|
{
|
|
|
|
switch($type) {
|
|
|
|
case 'item':
|
|
|
|
$typeid = 0;
|
|
|
|
break;
|
|
|
|
case 'tag':
|
|
|
|
$typeid = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $query->where('type', $typeid);
|
|
|
|
}
|
|
|
|
|
2018-10-21 11:39:12 +00:00
|
|
|
public function enhanced()
|
|
|
|
{
|
2018-10-23 14:53:56 +00:00
|
|
|
if(isset($this->class) && !empty($this->class)) {
|
|
|
|
$app = new $this->class;
|
|
|
|
} else {
|
2018-10-29 19:01:25 +00:00
|
|
|
return false;
|
2018-10-23 14:53:56 +00:00
|
|
|
}
|
2018-10-21 11:39:12 +00:00
|
|
|
return (bool)($app instanceof \App\EnhancedApps);
|
|
|
|
}
|
|
|
|
|
2018-11-06 14:52:45 +00:00
|
|
|
public static function isEnhanced($class)
|
|
|
|
{
|
|
|
|
$app = new $class;
|
|
|
|
return (bool)($app instanceof \App\EnhancedApps);
|
|
|
|
}
|
|
|
|
|
2018-10-29 19:01:25 +00:00
|
|
|
public function enabled()
|
|
|
|
{
|
|
|
|
if($this->enhanced()) {
|
|
|
|
$config = $this->getconfig();
|
|
|
|
if($config) {
|
|
|
|
return (bool) $config->enabled;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-10-21 12:23:23 +00:00
|
|
|
public function getconfig()
|
2018-10-21 11:39:12 +00:00
|
|
|
{
|
2018-10-30 14:58:45 +00:00
|
|
|
$explode = explode('\\', $this->class);
|
|
|
|
|
|
|
|
|
|
|
|
if(!isset($this->description) || empty($this->description)) {
|
|
|
|
$config = new \stdClass;
|
|
|
|
$config->name = end($explode);
|
|
|
|
$config->enabled = false;
|
|
|
|
return $config;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-10-23 14:53:56 +00:00
|
|
|
|
2018-10-21 11:39:12 +00:00
|
|
|
$config = json_decode($this->description);
|
2018-10-21 12:23:23 +00:00
|
|
|
|
|
|
|
$config->name = end($explode);
|
|
|
|
|
2018-10-21 11:39:12 +00:00
|
|
|
|
|
|
|
$config->url = $this->url;
|
|
|
|
if(isset($config->override_url) && !empty($config->override_url)) {
|
|
|
|
$config->url = $config->override_url;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $config;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-12 13:57:46 +00:00
|
|
|
/**
|
|
|
|
* Get the user that owns the item.
|
|
|
|
*/
|
|
|
|
public function user()
|
|
|
|
{
|
|
|
|
return $this->belongsTo('App\User');
|
|
|
|
}
|
|
|
|
|
2018-02-17 00:13:38 +00:00
|
|
|
|
2018-01-29 12:41:57 +00:00
|
|
|
}
|