User.php 2.91 KB
<?php

namespace App\Model;

use App\Constants\AclRoles;
use App\Mvc\DateTrackingModel;
use App\User\Service;
use PhalconApi\Exception;
use PhalconApi\Constants\ErrorCodes;

class User extends DateTrackingModel
{
    public $id;
    public $role;
    public $username;
    public $password;
    public $email;

    public function getSource()
    {
        return 'user';
    }

    public function columnMap()
    {
        return parent::columnMap() + [
            'id' => 'id',
            'role' => 'role',
            'email' => 'email',
            'username' => 'username',
            'password' => 'password'
        ];
    }

    public function initialize()
    {
        $this->hasMany('id', Project::class, 'user_id', [
            'alias' => 'Projects',
        ]);
    }

    public function getUsername()
    {
        return $this->username;
    }

    public function setUsername($username)
    {
        /** validation: unique, non-empty, 4+ letters **/
            $same_user = User::find(["username = '".$username."'"]);
            if (isset($same_user[0]) && !empty($same_user[0]->username))
            {
                $msg = 'Post-data is invalid, trying to use non-unique value `'.$username.'` of `username`';
                throw new Exception(ErrorCodes::POST_DATA_INVALID, $msg, ['username' => $username]);
            }
            elseif (empty($username))
            {
                $msg = 'Post-data is invalid, trying to use empty value of `username`';
                throw new Exception(ErrorCodes::DATA_NOT_FOUND, $msg, ['username' => $username]);
            }
            elseif (strlen($username) < 4)
            {
                $msg = 'Post-data is invalid, value of `username` should be more than 4 letters';
                throw new Exception(ErrorCodes::POST_DATA_INVALID, $msg, ['username' => $username]);
            }
        /** ---------------------------------------- **/

        $this->username = $username;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function setEmail($email)
    {
        /** validation: FILTER_VALIDATE_EMAIL **/
            if (!filter_var($email, FILTER_VALIDATE_EMAIL))
            {
                $msg = 'Post-data is invalid, bad email value';
                throw new Exception(ErrorCodes::POST_DATA_INVALID, $msg, ['email' => $email]);
            }
        /** ---------- */

        $this->email = $email;
    }

    public function getRole()
    {
        $service = new Service();
        return $service->getRole();
    }

    public function setRole($role)
    {
        /** validation: constant value **/
            if (!in_array($role, AclRoles::ALL_ROLES))
            {
                $msg = 'Post-data is invalid, bad `role` value';
                throw new Exception(ErrorCodes::POST_DATA_INVALID, $msg, ['role' => $role]);
            }
        /** -------------------------- **/

        $this->role = $role;
    }

}