2017 © Pedro Peláez
 

library apply_form_l5

Apply Forms handler package for L5

image

vis/apply_form_l5

Apply Forms handler package for L5

  • Wednesday, January 24, 2018
  • by KGluschenko
  • Repository
  • 1 Watchers
  • 1 Stars
  • 26 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 11 Versions
  • 0 % Grown

The README.md

Apply Form

Пакет Laravel 5 предназначенный для работы с формами. Требует и автоматически устанавливает пакет https://github.com/arturishe21/mail_templates_l5 для работы с отправкой писем. Поддерживает интеграцию с Google Invisible reCaptcha., (*1)

Разделы 1. Установка 2. VIS-CMS 3. Настройка 4. Пример использования 5. Описание классов, (*2)

Установка

Выполняем, (*3)

    composer require "vis/apply_form_l5":"1.*"

Добавляем ApplyFormServiceProvider в массив ServiceProviders в config/app.php, (*4)

   Vis\ApplyForm\ApplyFormServiceProvider::class,

Выполняем миграцию таблиц, (*5)

   php artisan migrate --path=vendor/vis/apply_form_l5/src/Migrations

Публикуем js, nodes, (*6)

    php artisan vendor:publish --provider="Vis\ApplyForm\ApplyFormServiceProvider" --force

Добавляем в layouts.default(или на конкретную вьюху, если заявка только на одной странице) перед закрывающим тегом body, (*7)

@include('apply_form::apply_form')

VIS-CMS

В \config\builder\admin.php дописываем массив, (*8)

    array(
        'title' => 'Заявки',
        'icon'  => 'list',
        'check' => function() {
            return Sentinel::hasAccess('admin.apply_form.view');
        },
        'submenu' => array(
            array(
                'title' => "Отправленные заявки",
                'check' => function() {
                    return Sentinel::hasAccess('admin.apply_form.view');
                },
                'submenu' => array(
                    //определение tb-definitions для форм заявок
                )
            ),
            array(
                'title' => "Сообщения ответы",
                'link'  => '/vis_apply_form_setting_messages',
                'check' => function() {
                    return Sentinel::hasAccess('admin.vis_apply_form_setting_messages.view');
                }
            ),
            array(
                'title' => "E-mail адреса",
                'link'  => '/vis_apply_form_setting_emails',
                'check' => function() {
                    return Sentinel::hasAccess('admin.vis_apply_form_setting_emails.view');
                }
            ),
        )
    ),

Добавляем права доступа в config/builder/tb-definitions/groups.php и добавляем их к группам., (*9)

    'Заявки' => array(
        'admin.apply_form.view'   => 'Просмотр',
        'admin.apply_form.create' => 'Создание',
        'admin.apply_form.update' => 'Редактирование',
        'admin.apply_form.delete' => 'Удаление',
    ),
    'Заявки - Сообщения' => array(
        'admin.vis_apply_form_setting_messages.view'   => 'Просмотр',
        'admin.vis_apply_form_setting_messages.create' => 'Создание',
        'admin.vis_apply_form_setting_messages.update' => 'Редактирование',
        'admin.vis_apply_form_setting_messages.delete' => 'Удаление',
    ),
    'Заявки - Имейлы' => array(
        'admin.vis_apply_form_setting_emails.view'   => 'Просмотр',
        'admin.vis_apply_form_setting_emails.create' => 'Создание',
        'admin.vis_apply_form_setting_emails.update' => 'Редактирование',
        'admin.vis_apply_form_setting_emails.delete' => 'Удаление',
    ),

Настройка

В файле config/apply_form/apply_form.php , (*10)

Включаем капчу и добавляем публичный и скрытый ключи, (*11)

    /**
     * Defines usage of Google Invisible reCaptcha
     * @link https://www.google.com/recaptcha/admin
     */
    'grecaptcha' => [
        'enabled'    => true,
        'site_key'   => '',
        'secret_key' => ''
    ],

В файле public/js/apply_form_rules.js переопределяем методы и указываем в них свои действия(например, вызов попапа с кастомным сообщением) по выполнению ajax запроса, (*12)

ApplyForm.successCallback = function (message) {
};

ApplyForm.failCallback = function (message) {
};

В этом же файле можно дописать дополнительные правила проверки полей, например добавить маску для телефонов. Для этого в класс ApplyFormRules нужно добавить свой метод, например:, (*13)

        initPhoneMask: function () {
            $('input[name=phone]').mask('+38 (000) 000-00-00', {clearIfNotMatch: true});
        },

И зарегистрировать его инициализацую в методе ApplyFormRules.init(), (*14)

        init: function () {
            ApplyFormRules.initPhoneMask();
        },

Пример использования

  1. Определяем класс, который рассширяет класс Vis\ApplyForm\Models\AbstractApplyForm
namespace App\Models\ApplyForm;

use Vis\ApplyForm\Models\AbstractApplyForm;

class ApplyFormAuthorizedMessage extends AbstractApplyForm
{
    protected $table = "apply_form_authorized_messages";

    protected $validationRules = [
        "personal_data" => 'required|integer|in:1',
        'name'          => 'alpha|min:4|max:64',
        'answer_type'   => 'required|in:phone,email',
        'phone'         => 'nullable|required_if:answer_type,phone|size:19|regex:/\+38 \((\d{3})\) \d{3}-\d{2}-\d{2}/',
        'email'         => 'nullable|required_if:answer_type,email|email|min:4|max:64',
        'message'       => 'required|min:10|max:2000',
        'file'       => 'required|max:3072|mimes:pdf,doc,docx'
    ];

    protected $fileFieldName = 'file';
    protected $fileStorageFolder = 'storage/apply_forms/files/authorized_message/';

    protected $mailTemplate    = 'shablon-zajavka-avtorizirovannoe-obrashenie';
    protected $mailAddressSlug = 'email-zayavka-avtorizirovannoe-obrashenie';
    protected $messageSlug     = 'soobshchenie-zayavka-avtorizirovannoe-obrashenie';
    protected $messageFailSlug = 'soobshchenie-fail-zayavka-avtorizirovannoe-obrashenie';

    protected function prepareInputData(array $inputData): array
    {
        $this->inputCleaner()->setArray($inputData);

        $preparedData = [
            'name'        => $this->inputCleaner()->getCleanString('name'),
            'answer_type' => $this->inputCleaner()->getString('answer_type'),
            'phone'       => $this->inputCleaner()->getString('phone'),
            'email'       => $this->inputCleaner()->getCleanString('email'),
            'message'     => $this->inputCleaner()->getCleanString('message'),
            'file'        => $this->inputCleaner()->getString('file'),
        ];

        return $preparedData;
    }

    protected function prepareMailData(array $preparedData): array
    {
        $preparedData['answer_type'] = $preparedData['answer_type'] == 'email' ? 'Email' : 'Телефон';
        $preparedData['file_url']    =  asset($preparedData['file']);


        return $preparedData;
    }

    protected function customCallback(array $attributes)
    {
        //print_arr($attributes);
    } 
}
  1. Добавляем его в массив форм apply_forms в config/apply_form/apply_form.php
    'apply_forms' => [
        'authorized_messages' => App\Models\ApplyForm\ApplyFormAuthorizedMessage::class,
    ],
  1. Создаем форму в шаблонах с названием 'название_формы_form', например такую:
<form id="authorized_message_form">
    <div class="form-field">
        <select name="answer_type">
            <option value="email">{{__t('Отримати відповідь на e-mail')}}</option>
            <option value="phone">{{__t('Отримати відповідь телефоном')}}</option>
        </select>
    </div>
    <div class="form-field">
        <input type="text" name='name' placeholder="{{__t('ПІБ')}}">
        <p>{{__t("обов`язкове поле")}}</p>
    </div>
    <div class="form-field">
        <input type="text" name='email' placeholder="E-mail" class="answer-type">
        <p>{{__t("обов`язкове поле")}}</p>
    </div>
    <div class="form-field">
        <input type="text" name='phone' placeholder="{{__t('Номер телефону')}}" class="answer-type">
        <p>{{__t("обов`язкове поле")}}</p>
    </div>
    <div class="form-field">
        <textarea name='message' placeholder="{{__t('Повідомлення')}}" ></textarea>
        <p>{{__t("обов`язкове поле")}}</p>
    </div>
        <div class="form-field">
            <div class="attach-file">
                <div class="upload-file">
                    <input type="file" class="file-input" placeholder="file" id="file" name="file" accept="application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/pdf">
                    <div class="file_upload">
                        <div class="file_name_placeholder">{{__t('файл')}} (DOC, DOCX, PDF)</div>
                        <div class="file_name">{{__t('файл')}} (DOC, DOCX, PDF)</div>
                        <button class="btn btn_delete">{{__t('Видалити')}}</button>
                        <button class="btn btn_upload">{{__t('Завантажити')}}</button>
                    </div>
                    <div class="hint">{{__t('Дозволено приєднувати тільки')}}: DOC, DOCX, PDF (3 MB {{__t('максимум')}})</div>
                </div>
            </div>
        </div>
    <div class="form-field">
        <input type="checkbox" name="personal_data" id="authorized_message-personal_data-checkbox" class="checkbox" value="1">
        <label for="authorized_message-personal_data-checkbox" class="css-label">
            {{__t("Я згоден на збір та обробку моїх персональних даних, відповідно до")}} <a href="javascript:;">{{__t('Закону України “Про захист персональних даних”')}}</a>
        </label>
    </div>
    <div class="form-button">
        <button type="submit" class="btn">{{__t('Відправити')}}</button>
    </div>
</form>
  1. Дописываем в файл public/js/apply_form_rules.js правила jquery validation Правила определяются как 'названиеформы_rules' и 'названиеформы_messages'
ApplyForm.authorized_message_rules = {
    'personal_data' : { required: true },
    'answer_type'   : { required: true, responseMethod: true  },
    'name'          : { required: true, rangelength: [4,64]},
    'phone'         : { rangelength: [19, 19]},
    'email'         : { rangelength: [4, 64], email: true },
    'message'       : { required: true, rangelength: [10, 2000]},
};

ApplyForm.authorized_message_messages = {
    'personal_data' : { required: ''},
    'answer_type'   : { required: '', responseMethod: '',},
    'name'          : { required: '', rangelength: '' },
    'phone'         : { rangelength: '' },
    'email'         : { rangelength: '', email: '' },
    'message'       : { required: '', rangelength: ''},
};

ApplyForm.successCallback = function (message) {
    Popup.showWithMessage('popup-success', message);
};

ApplyForm.failCallback = function (message) {
    Popup.showWithMessage('popup-error', message);
};

//add additional methods for validating inputs
var ApplyFormRules =
    {
        initPhoneMask: function () {
            $('input[name=phone]').mask('+38 (000) 000-00-00', {clearIfNotMatch: true});
        },

        init: function () {
            ApplyFormRules.initPhoneMask();
        },
    }

Описание классов

  1. Класс расширяемый классом Vis\ApplyForm\Models\AbstractApplyForm
namespace App\Models\ApplyForm;

use Vis\ApplyForm\Models\AbstractApplyForm;

class ApplyFormAuthorizedMessage extends AbstractApplyForm
{

}

Описание обязательных свойств:, (*15)

Имя используемой таблицы Значение: строка', (*16)

    protected $table = '';

Описание дополнительных свойств:, (*17)

Правила валидации Значение: массив, (*18)

    protected $validationRules = [
    ];

Название поля с файлом Используется, если форма передает файл Значение: строка, (*19)

    protected $fileFieldName = '';

Путь к папке, в которой будет хранится файл относительно публичной директории Используется, если форма передает файл Значение: строка, (*20)

    protected $fileStorageFolder = '';

Путь к папке, в которой будет хранится файл относительно публичной директории Используется, если форма передает файл Значение: строка, (*21)

    protected $fileStorageFolder = '';

Название шаблона письма Используется, если после сохранения нужно отправить письмо на почту Значение: строка с slug шаблона класса Vis\MailTemplates\MailT, (*22)

    protected $mailTemplate    = '';

Список имейлов для отправки письма Используется, если после сохранения нужно отправить письмо на почту Значение: строка с slug записи класса Vis\ApplyForm\Models\ApplyFormSettingEmail, (*23)

    protected $mailAddressSlug = '';

Возвращаемое сообщение после удачного сохранения заявки Используется, если после сохранения нужно отправить письмо на почту Значение: строка с slug записи класса Vis\ApplyForm\Models\ApplyFormSettingMessage, (*24)

    protected $messageSlug = '';

Возвращаемое сообщение после неудачного сохранения заявки Используется, если после сохранения нужно отправить письмо на почту Значение: строка с slug записи класса Vis\ApplyForm\Models\ApplyFormSettingMessage, (*25)

    protected $messageFailSlug = '';

Описание обязательных методов:, (*26)

Метод подготовки исходных данных Рекомендуется использовать класс-помошник Vis\ApplyForm\Helpers\InputCleaner для очистки данных Значение: массив Возвращаемое значение: массив, (*27)

    protected function prepareInputData(array $inputData): array

Описание дополнительных свойств:, (*28)

Метод преобразования подготовленных данных в данные для отправки на почту Значение: массив Возвращаемое значение: массив, (*29)

    protected function prepareMailData(array $preparedData): array

Метод вызова дополнительного функционала вызываемый после сохранения заявки, например передача данных в API Значение: массив, (*30)

    protected function customCallback($attributes)
 ```

2. Класс Vis\ApplyForm\Helpers\InputCleaner

**Описание методов:**

Метод установки массива исходных данных</br>
Значение: массив</br>
```php
    public function setArray(array $array)

Метод получения массива данных Значение: массив, (*31)

    public function getArray(): array

Метод получения значения по названию поля из массива данных Значение: строка Возвращаемое значение: значение из массива или null, (*32)

    public function get(string $field)

Метод получения целочисленного значения по названию поля из массива данных Значение: строка Возвращаемое значение: целое число, (*33)

    public function getInt(string $field): int

Метод получения дробногочисленного значения по названию поля из массива данных Значение: строка Возвращаемое значение: дробное число, (*34)

    public function getFloat(string $field): float

Метод получения строчного значения по названию поля из массива данных Значение: строка Возвращаемое значение: дробное число, (*35)

    public function getString(string $field): string

Метод получения очищенного строчного значения по названию поля из массива данных Значение: строка Возвращаемое значение: дробное число, (*36)

    public function getCleanString(string $field): string

Метод получения json строки по названию поля из массива данных Значение: строка Возвращаемое значение: строка json, (*37)

    public function getJson(string $field): string
  1. Класс Vis\ApplyForm\Helpers\TableHandler Класс хендлер для tb-definitions.

Метод превращения строки с ссылкой на файл в ссылку на файл, (*38)

    protected function handleFile($formField, array &$row)

Метод превращения строки типа foreign в ссылку на foreign объект Примечание: в дефинишен поля foreign надо дописать параметр 'foreign_model', а в указанной модели определить метод getAdminUrl, (*39)

    protected function handleForeign($formField, array &$row)

The Versions

24/01 2018

dev-master

9999999-dev

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

24/01 2018

1.0.9

1.0.9.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

21/11 2017

1.0.8

1.0.8.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

21/11 2017

1.0.7

1.0.7.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

14/11 2017

1.0.6

1.0.6.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

13/10 2017

1.0.5

1.0.5.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

13/10 2017

1.0.4

1.0.4.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

13/09 2017

1.0.3

1.0.3.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

11/09 2017

1.0.2

1.0.2.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

05/09 2017

1.0.1

1.0.1.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis

31/08 2017

1.0

1.0.0.0

Apply Forms handler package for L5

  Sources   Download

proprietary

The Requires

 

by vis