/home/mip/mip/app/Modules/Likod/Requests/Clients/ClientRequest.php
<?php

namespace QxCMS\Modules\Likod\Requests\Clients;

use Illuminate\Foundation\Http\FormRequest;

class ClientRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        if($this->getId()) {
            return [
                'client_name' => 'required|min:6',
                'client_address' => 'required|min:6',
                'telephone_no' => 'required|min:6',
                'email' => 'required|email',
                //'database_name' => 'required|min:5',
                'database_host' => 'required',
                'database_username' => 'required',
                'status' => 'required|in:0,1',
                'number_of_users' => 'required|numeric',
                'disk_size' => 'required|numeric',
                'date_picker_format' => 'required|numeric|in:1,2,3',
                'monthly_mail_quota' => 'required|numeric',
                'mail_driver' => 'required|in:smtp,mail',
                'mail_sender_address' => 'required|email',
                'mail_sender_name' => 'required|min:6',
                'mail_host' => 'required',
                'mail_username' => 'required',
                'mail_password' => 'required',
                'mail_port' => 'required|numeric',
                'storage_type' => 'required|in:public,s3',
                's3_key' => 'required_if:storage_type,s3',
                's3_secret' => 'required_if:storage_type,s3',
                's3_region' => 'required_if:storage_type,s3',
                's3_bucket_name' => 'required_if:storage_type,s3',
                'cpanel_host' => 'required_with:create_email',
                'cpanel_ip' => 'required_with:create_email',
                'cpanel_port' => 'required_with:create_email',
                'cpanel_account' => 'required_with:create_email',
                'cpanel_password' => 'required_with:create_email',
                'cpanel_domain' => 'required_with:create_email',
                'cpanel_user_default_password' => 'required_with:create_email',
            ];
        } 

        return [
                'name' => 'required|min:6',                
                'email' => 'required|email',
                'password' => 'required|min:6|confirmed',
                'client_name' => 'required|min:6',
                'client_address' => 'required|min:6',
                'telephone_no' => 'required|min:6',
                'email' => 'required|email',
                'database_name' => 'required|min:5',
                'database_host' => 'required',
                'database_username' => 'required',
                'status' => 'required|in:0,1',
                'number_of_users' => 'required|numeric',
                'disk_size' => 'required|numeric',
                'date_picker_format' => 'required|numeric|in:1,2,3',
                'monthly_mail_quota' => 'required|numeric',
                'mail_driver' => 'required|in:smtp,mail',
                'mail_sender_address' => 'required|email',
                'mail_sender_name' => 'required|min:6',
                'mail_host' => 'required',
                'mail_username' => 'required',
                'mail_password' => 'required',
                'mail_port' => 'required|numeric',
                'storage_type' => 'required|in:public,s3',
                's3_key' => 'required_if:storage_type,s3',
                's3_secret' => 'required_if:storage_type,s3',
                's3_region' => 'required_if:storage_type,s3',
                's3_bucket_name' => 'required_if:storage_type,s3',
                'cpanel_host' => 'required_with:create_email',
                'cpanel_ip' => 'required_with:create_email',
                'cpanel_port' => 'required_with:create_email',
                'cpanel_account' => 'required_with:create_email',
                'cpanel_password' => 'required_with:create_email',
                'cpanel_domain' => 'required_with:create_email',
                'cpanel_user_default_password' => 'required_with:create_email',
            ];
    }

    public function messages()
    {
        if($this->getId()) {
            return [
                'password.confirmed' => 'Re-type password does not match.',
                'status.required' => 'The account status is a required field.',
                'status.in' => 'The selected account status is invalid.',
                's3_key.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                's3_secret.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                's3_region.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                's3_bucket_name.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                'cpanel_host.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_ip.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_port.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_account.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_password.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_domain.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_user_default_password.required_with' => 'The :attribute field is required when create email is checked.',
            ];
        }

        return [
                'name.required' => 'The name of user is a required field.',
                'name.min' => 'The name of user must be at least :min characters.',
                'password.confirmed' => 'Re-type password does not match.',
                'status.required' => 'The account status is a required field.',
                'status.in' => 'The selected account status is invalid.',
                's3_key.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                's3_secret.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                's3_region.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                's3_bucket_name.required_if' => 'The :attribute field is required if storage type is Amazon S3.',
                'cpanel_host.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_ip.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_port.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_account.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_password.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_domain.required_with' => 'The :attribute field is required when create email is checked.',
                'cpanel_user_default_password.required_with' => 'The :attribute field is required when create email is checked.',
            ];
    }

    public function getId()
    {
        return decode($this->client);
    }
}