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

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

declare(strict_types=1);

namespace App\Controllers\User;

use Hleb\Static\Request;
use Hleb\Base\Controller;
use App\Models\ActionModel;
use App\Models\User\InvitationModel;
use App\Content\Сheck\Validator;
use SendEmail, Meta, Html, Msg;

class InvitationsController extends Controller
{
    /**
     * Show the form for creating an invite
     *
     * @return void
     */
    public function inviteForm()
    {
        render(
            '/user/invite',
            [
                'meta'  => Meta::get(__('app.invite')),
                'data'  => []
            ]
        );
    }

    /**
     * User invite page
     *
     * @return void
     */
    function invitationForm()
    {
        render(
            '/user/invitation',
            [
                'meta'  => Meta::get(__('app.invites')),
                'data'  => [
                    'invitations'   => InvitationModel::userResult(),
                    'count_invites' => $this->container->user()->get()['invitation_available'],
                ]
            ]
        );
    }

    function add()
    {
        $invitation_email = Request::post('email')->value();

        Validator::invite($invitation_email, $this->container->user()->get()['invitation_available']);

        $invitation_code = Html::randomString('crypto', 24);

        InvitationModel::create($invitation_code, $invitation_email);

        $this->escort($invitation_code, $invitation_email);

        Msg::redirect(__('msg.invite_created'), 'success', url('invitations'));
    }

    /**
     * We will send an email and write logs
     *
     * @param string $invitation_code
     * @param string $invitation_email
     * @return void
     */
    function escort(string $invitation_code, string $invitation_email)
    {
        $link = url('invite.reg', ['code' => $invitation_code]);

        SendEmail::mailText($this->container->user()->id(), 'invite.reg', ['link' => $link, 'invitation_email' => $invitation_email]);

        ActionModel::addLogs(
            [
                'id_content'    => 0,
                'action_type'   => 'invite',
                'action_name'   => 'added',
                'url_content'   => $link,
            ]
        );
    }
}