Rename Admin views directory, add some functions on models

This commit is contained in:
Ludovic CANDELLIER
2021-07-27 22:12:58 +02:00
parent 734ec87b89
commit 7ec40145de
229 changed files with 81 additions and 349 deletions

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Models\Core;
use Illuminate\Database\Eloquent\SoftDeletes;
use Venturecraft\Revisionable\RevisionableTrait;
use Wildside\Userstamps\Userstamps;
use BeyondCode\Comments\Comment as parentComment;
class Comment extends parentComment
{
use SoftDeletes, Userstamps;
}

View File

@@ -11,6 +11,7 @@ use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media; use Spatie\MediaLibrary\MediaCollections\Models\Media;
use BeyondCode\Comments\Traits\HasComments;
use Rinvex\Categories\Traits\Categorizable; use Rinvex\Categories\Traits\Categorizable;
use Rinvex\Tags\Traits\Taggable; use Rinvex\Tags\Traits\Taggable;
use Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin; use Fico7489\Laravel\EloquentJoin\Traits\EloquentJoin;
@@ -18,7 +19,7 @@ use Wildside\Userstamps\Userstamps;
class Article extends Model implements HasMedia class Article extends Model implements HasMedia
{ {
use Categorizable, EloquentJoin, InteractsWithMedia, Taggable, SoftDeletes, UserStamps; use Categorizable, EloquentJoin, HasComments, InteractsWithMedia, Taggable, SoftDeletes, UserStamps;
protected $guarded = ['id']; protected $guarded = ['id'];
protected $table = 'shop_articles'; protected $table = 'shop_articles';

View File

@@ -4,8 +4,11 @@ namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use BeyondCode\Comments\Traits\HasComments;
class Offer extends Model class Offer extends Model
{ {
use HasComments;
protected $guarded = ['id']; protected $guarded = ['id'];
protected $table = 'shop_offers'; protected $table = 'shop_offers';

View File

@@ -3,11 +3,13 @@
namespace App\Models\Shop; namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use BeyondCode\Comments\Traits\HasComments;
use Znck\Eloquent\Traits\BelongsToThrough; use Znck\Eloquent\Traits\BelongsToThrough;
class PriceList extends Model class PriceList extends Model
{ {
use BelongsToThrough; use BelongsToThrough, HasComments;
protected $guarded = ['id']; protected $guarded = ['id'];
protected $table = 'shop_price_lists'; protected $table = 'shop_price_lists';

View File

@@ -5,10 +5,10 @@ namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Staudenmeir\EloquentHasManyDeep\HasRelationships; use Staudenmeir\EloquentHasManyDeep\HasRelationships;
use BeyondCode\Comments\Traits\HasComments;
class Tariff extends Model class Tariff extends Model
{ {
use HasRelationships; use HasComments, HasRelationships;
protected $guarded = ['id']; protected $guarded = ['id'];
protected $table = 'shop_tariffs'; protected $table = 'shop_tariffs';

View File

@@ -4,8 +4,11 @@ namespace App\Models\Shop;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use BeyondCode\Comments\Traits\HasComments;
class Variation extends Model class Variation extends Model
{ {
use HasComments;
protected $guarded = ['id']; protected $guarded = ['id'];
protected $table = 'shop_variations'; protected $table = 'shop_variations';

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Repositories\Core;
class Comments
{
public static function getByModel($model)
{
if (!$model) {
return false;
}
return $model->comments;
}
public static function storeComments($model, $comments)
{
if ($comments) {
foreach ($comments as $comment) {
self::storeComment($model, $comment);
}
}
}
public static function storeComment($model, $comment)
{
return $model->comment($comment);
}
public static function deleteComments($model)
{
return true;
}
public static function deleteComment($model, $index)
{
return true;
}
}

View File

@@ -1,345 +0,0 @@
<?php
namespace App\Repositories\Core;
use Illuminate\Support\Str;
use App\Repositories\Core\Debug;
class DataTable
{
public static $is_debug = 0;
public static function render($data, $options)
{
$items = static::get($data, $options);
$data = $items['elements'] ? $items['elements'] : array();
$success = true;
$message = '';
$json = [
'success' => $success,
'data' => $data,
'message' => $message,
'code' => $success ? 200 : 500,
'recordsTotal' => $items['total'],
'recordsFiltered' => $items['totalFiltered'],
];
\Debugbar::disable();
echo json_encode($json);
return $json;
exit;
return response()->json($json);
}
public static function get($data, $options = array())
{
// Debug::fdump($options);
$model = self::getModel($options);
$select = isset($options['select']) ? $options['select'] : '';
$elements = new $model();
$table = $elements->getTable();
$real_id = $table . '.id';
$data2 = static::getElements($data, $options);
// Debug::fdump($data2);
$elements = $data2['elements'];
$length = $data2['length'];
$skip = $data2['skip'];
$order = $data2['order'];
$sort = $data2['sort'];
// Debug::fdump($elements->get()->toArray());
//
// Debug::fdump($order);
// exit;
if (strpos($order, '.')) {
$tab = explode('.', $order);
$nb_model = count($tab) - 1;
for ($i = 0; $i < $nb_model; $i++) {
$controller = $tab[$i];
if (isset($options['namespace'])) {
$namespace = $options['namespace'];
} else {
$namespace = 'App\Models\\';
}
$jointModelObj = $namespace.ucfirst(Str::camel($controller));
// Debug::fdump($controller);
$jointModel = new $jointModelObj();
$jointTable = $jointModel->getTable();
// Debug::fdump($controller);
// Debug::fdump($jointTable);
if ($table !== $jointTable) {
$elements = $elements->leftJoin($jointTable, $jointTable.'.id', '=', $controller.'_id');
}
$table = $controller;
}
$order = $jointTable . '.' . $tab[$nb_model];
}
/*
if (!empty($select)) {
$elements = $elements->select('*',"$real_id as id", $select);
} else {
$elements = $elements->select('*',"$real_id as id");
}
*/
// Debug::fdump($order);
$elements = $elements->orderBy($order, $sort);
if (!empty($options['order']) && ($options['order'] !== $order)) {
$elements = $elements->orderBy($options['order'], $options['sort']);
}
// Debug::dump($elements);
if (isset($options['trash']) && $options['trash']) {
$elements = $elements->withTrashed()->take($length)->skip($skip)->get();
} else {
$elements = $elements->take($length)->skip($skip)->get();
}
// Debug::dump($elements);
$tab = [
'elements' => $elements->toArray(),
'total' => $data2['total'],
'totalFiltered' => $data2['totalFiltered']
];
// dump($elements->toArray());
return $tab;
}
public static function getModel($options)
{
// return '\App\Models\\'.$options['app'].$options['model'];
return $options['model'];
}
public static function getElements($data, $options)
{
$vars = static::QueryBuilder($data, $options);
// Debug::fdump($vars);
$model = self::getModel($options);
// Debug::dump($model);
$elements = new $model();
$total = $elements::count();
// Debug::dump($vars);
// exit;
if (is_array($vars)) {
extract($vars);
}
// dump($order);
if (empty($order)) {
$order = $options['order'];
$sort = $options['sort'];
}
$with = (isset($options['with'])) ? $options['with'] : null;
$withCount = (isset($options['withCount'])) ? $options['withCount'] : null;
$where = (isset($vars['where'])) ? $vars['where'] : null;
$searchcol = (isset($vars['searchcol'])) ? $vars['searchcol'] : null;
$filter = (isset($vars['filter'])) ? $vars['filter'] : null;
Debug::dump($with);
Debug::dump($withCount);
Debug::dump($where);
Debug::dump($searchcol);
Debug::dump($filter);
$elements = ($with) ? $elements->with($with) : $elements;
$elements = ($withCount) ? $elements->withCount($withCount) : $elements;
$elements = ($where) ? $elements->whereRaw($where) : $elements;
$elements = ($filter) ? $elements->whereRaw($filter) : $elements;
// Debug::fdump($elements->get()->toArray());
// Debug::message($where);
// exit;
$elements = static::addSearchFilter($elements, $hasfilters);
$elements = static::addSearch($elements, $searchcol, $search);
Debug::dump($hasfilters);
// dump($search);
//
$totalFiltered = $elements->count();
// Debug::breakpoint($elements);
// exit;
$data2 = [
'elements' => $elements,
'total' => $total,
'totalFiltered' => $totalFiltered,
'length' => $length,
'skip' => $skip,
'order' => $order,
'sort' => $sort,
];
// var_dump($data2['elements']->get()->toArray());
return $data2;
}
public static function addSearchFilter($elements, $hasfilters)
{
if (is_array($hasfilters)) {
foreach ($hasfilters as $hasfilter) {
if (!empty($hasfilter['search'])) {
$elements = $elements->whereHas(
$hasfilter['controller'], function ($query) use ($hasfilter) {
if ($hasfilter['like']) {
$query->where($hasfilter['field'], 'like', '%' . $hasfilter['search'] . '%');
} else {
$query->where($hasfilter['field'], '=', $hasfilter['search']);
}
}
);
}
}
}
return $elements;
}
public static function addSearch($elements, $searchcol, $search)
{
if (!empty($search)) {
if (strpos($searchcol, '.')) {
$tab = explode('.', $searchcol);
$searchField = [
'controller' => $tab[0],
'field' => $tab[1],
'search' => $search,
];
$elements = $elements->whereHas(
$searchField['controller'], function ($query) use ($searchField) {
$query->where($searchField['field'], 'like', '%' . $searchField['search'] . '%');
}
);
} else {
$elements = $elements->where($searchcol, 'like', "%$search%");
}
}
return $elements;
}
public static function QueryBuilder($data, $options = array())
{
$model = self::getModel($options);
$elements = new $model();
$table = $elements->getTable();
$filter = '';
$hasfilters = array();
// Debug::fdump($data);
// Debug::message($data);
// Debug::dump($options);
// Debug::dump($data);
if (is_array($options) && is_array($options['likefields'])) {
$likefields = $options['likefields'];
}
$length = isset($data['length']) ? (int) $data['length'] : 10;
$skip = isset($data['start']) ? (int) $data['start'] : 0;
if (isset($data['search'])) {
$search = ($data['search']['value'] !== '') ? $data['search']['value'] : '';
} else {
$search = null;
}
// Debug::fdump($data);
if (isset($data['order'])) {
if ($data['order'][0]['dir']) { //on est sur qu'un tri est en cours, pb de la colonne 0
$sort = ($data['order'][0]['dir']);
$order = self::getSortcol($data);
}
} else {
$order = null;
$sort = null;
}
// Debug::dump($order);
if (isset($data['columns']) && is_array($data['columns'])) {
foreach ($data['columns'] as $item) {
$filter_search = $item['search']['value'];
$filter_col = ($item['name']) ? $item['name'] : $item['data'];
// Debug::dump($filter_col);
// Debug::dump($filter_search);
// Debug::dump(is_null($filter_search));
if (!is_null($filter_search)) {
// Debug::dump($item);
// Debug::dump($filter_search);
// Debug::dump($filter_col);
if (strpos($filter_col, '.')) {
$tab = explode('.', $filter_col);
if (is_array($likefields) && in_array($filter_col, $likefields)) {
$like = true;
} else {
$like = false;
}
$hasfilters[] = [
'controller' => $tab[0],
'field' => $tab[1],
'search' => $filter_search,
'like' => $like,
];
} else {
// $filter_col = $table . '.' .$item['data'];
$filter .= (!empty($filter)) ? ' and ' : '';
if (is_array($likefields) && in_array($filter_col, $likefields)) {
$filter .= "($table.$filter_col LIKE '%$filter_search%')";
} else {
$filter .= "($table.$filter_col = '$filter_search')";
}
}
}
}
}
if (isset($data['where'])) {
$where = $data['where'];
} else {
$where = null;
}
$options = [
'length' => $length,
'skip' => $skip,
'search' => $search,
'order' => $order,
'sort' => $sort,
'filter' => $filter,
'hasfilters' => $hasfilters,
'where' => $where,
];
Debug::dump($options);
return $options;
}
public static function getSortcol($data)
{
$sortcol = $data['order'][0]['column'];
if (!is_null($sortcol) && ($sortcol !== 0)) {
if (!empty($data['columns'][$sortcol]['name'])) {
$order = $data['columns'][$sortcol]['name'];
} else {
$order = $data['columns'][$sortcol]['data'];
}
}
return $order;
}
}

View File

@@ -0,0 +1,11 @@
@component('components.layout.box-collapse', ['id' => 'comments', 'title' => __('comments')])
@if (!empty($comments))
@foreach ($comments as $comment)
{!! $comment !!}
@endforeach
@endif
<button type="button" class="btn btn-primary">
Ajout note interne
<i class="fa fa-plus"></i>
</button>
@endcomponent

View File

@@ -58,6 +58,7 @@
<div class="col-md-4"> <div class="col-md-4">
@include('Admin.Shop.Articles.partials.product.images') @include('Admin.Shop.Articles.partials.product.images')
@include('components.uploader.widget', ['load_url' => route('Admin.Shop.Articles.getImages', ['id' => $article['id'] ?? false]), 'delete_url' => route('Admin.Shop.Articles.deleteImage'), 'title' => 'Photos', 'name' => 'images' ]) @include('components.uploader.widget', ['load_url' => route('Admin.Shop.Articles.getImages', ['id' => $article['id'] ?? false]), 'delete_url' => route('Admin.Shop.Articles.deleteImage'), 'title' => 'Photos', 'name' => 'images' ])
@include('Admin.Core.Comments.partials.comments')
</div> </div>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More