Просмотр файла libarea-0.9/app/Controllers/Facet/TeamFacetController.php

Размер файла: 2.75Kb
<?php

declare(strict_types=1);

namespace App\Controllers\Facet;

use Hleb\Static\Request;
use Hleb\Base\Controller;
use App\Content\Сheck\Availability;
use App\Models\FacetModel;
use Meta, Msg;

class TeamFacetController extends Controller
{
    public function index(): void
    {
        $type   = $this->accessType(Request::param('type')->asString());
        $facet  = Availability::facet(Request::param('id')->asPositiveInt(), 'id', $type);

        $this->access($facet['facet_user_id']);

        $users_team = FacetModel::getUsersTeam($facet['facet_id']);

        render(
            '/facets/team',
            [
                'meta'  => Meta::get(__('app.team') . ' | ' . $facet['facet_title']),
                'data'  => [
                    'facet'         => $facet,
                    'sheet'         => $facet['facet_type'] . 's',
                    'type'          => $type,
                    'users_team'    => $users_team,
                ]
            ]
        );
    }

    /**
     * Team change
     * Изменение команды
     *
     * @return void
     */
    public function edit(): void
    {
        $type = $this->accessType(Request::param('type')->asString());
        $facet = Availability::facet(Request::param('id')->asPositiveInt(), 'id', $type);

        $this->access($facet['facet_user_id']);

        $users = Request::allPost() ?? [];

        self::editUser($users, $facet['facet_id']);

        Msg::redirect(__('msg.change_saved'), 'success', url('team.form.edit', ['id' => $facet['facet_id'], 'type' => $type]));
    }

    /**
     * UWe will re-register the participants
     * Перезапишем участников 
     *
     * @param array $users
     * @param int $content_id
     * @return true
     */
    public static function editUser(array $users, int $content_id)
    {
        $arr = $users['user_id'] ?? [];
        $arr_user = json_decode($arr, true);

        return FacetModel::editUsersTeam($arr_user, $content_id);
    }

    /**
     * Only author and admin get accesss
     * Доступ получает только автор и админ
     *
     * @param int $facet_user_id
     * @return void
     */
    public function access(int $facet_user_id)
    {
        if ($facet_user_id != $this->container->user()->id() && !$this->container->user()->admin()) {
            redirect('/');
        }

        return true;
    }

    /**
     * Allowed facet types 
     * Разрешенные типы фасета
     *
     * @param string $type
     * @return string
     */
    public function accessType(string $type): string
    {
        if (!in_array($type = Request::param('type')->asString(), config('facets', 'permitted'))) {
            notEmptyOrView404([]);
        }

        return $type;
    }
}