<?php

class ACMS_POST_Form_Insert extends ACMS_POST_Form
{
    function post()
    {
        $Form = $this->extract('form');
        $Form->setMethod('code', 'required');
        $Form->setMethod('code', 'maxlength', '64');
        $Form->setMethod('code', 'regex', '@[a-zA-Z0-9_-]@');
        $Form->setMethod('code', 'double', $this->double($Form->get('code'), null, $Form->get('scope')));
        $Form->setMethod('name', 'required');
        $Form->setMethod('name', 'maxlength', '255');
        $Form->setMethod('form', 'operative', $this->formAuthorization()->canEdit((int) SUID, BID));
        $Form->validate(new ACMS_Validator());

        $Mail = $this->extract('mail');
        foreach ($Mail->listFields() as $fd) {
            if (!($val = $Mail->get($fd))) {
                $Mail->delete($fd);
            } else {
                $aryVal = [];
                foreach (explode(',', $val) as $_val) {
                    $_val   = trim($_val);
                    if (empty($_val)) {
                        continue;
                    }
                    $aryVal[]   = $_val;
                }
                $Mail->set($fd, $aryVal);
            }
        }

        $Option = $this->extract('option');
        $aryFd  = [];
        $aryMd  = [];
        $aryVal = [];
        foreach ($Option->getArray('field') as $i => $fd) {
            if (empty($fd)) {
                continue;
            }
            if (!($md = $Option->get('method', '', $i))) {
                continue;
            }
            $aryFd[]    = $fd;
            $aryMd[]    = $md;
            $aryVal[]   = $Option->get('value', '', $i);
        }
        $Option->set('field', $aryFd);
        $Option->set('method', $aryMd);
        $Option->set('value', $aryVal);

        $Form->addChild('mail', $Mail);
        $Form->addChild('option', $Option);
        $this->Post->removeChild('mail');
        $this->Post->removeChild('option');

        if ($this->Post->isValidAll()) {
            $formId = $this->formRepository()->insert(BID, $Form);

            AcmsLogger::info('フォームID「' . $Form->get('name') . '（' . $Form->get('code') . '）」を作成しました');

            $this->addMessage('フォームを作成しました');

            // PRG: 作成したフォームの編集画面へリダイレクトする（リロードによる二重登録を防ぐ）
            $this->redirect(acmsLink([
                'bid' => BID,
                'admin' => 'form_edit',
                'query' => [
                    'fmid' => $formId,
                ],
            ]));
        } else {
            AcmsLogger::info('フォームIDの作成に失敗しました', [
                'Form' => $Form,
            ]);
        }

        return $this->Post;
    }
}
