jidaikobo-shibata/a11yc

View on GitHub
classes/Controller/Process.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/**
 * A11yc\Controller\Process
 *
 * @package    part of A11yc
 * @author     Jidaikobo Inc.
 * @license    The MIT License (MIT)
 * @copyright  Jidaikobo Inc.
 * @link       http://www.jidaikobo.com
 */
namespace A11yc\Controller;

use A11yc\Model;

class Process
{

    /**
     * Show Index
     *
     * @return Void
     */
    public static function actionIndex()
    {
        $yml = Yaml::fetch();
        View::assign('current', Model\Process::fetchAll());
        View::assign('processes', $yml['processes']);
        View::assign('pages', Model\Page::fetchAll());
        View::assign('title', '試験プロセス');
        View::assign('body',  View::fetchTpl('process/index.php'), FALSE);
    }

    /**
     * discard
     *
     * @return Void
     */
    public static function actionDiscard()
    {
        Model\Data::deleteByKey('process');
        Util::redirect(A11YC_URL.'?c=process&a=index');
    }

    /**
     * Form
     *
     * @return Void
     */
    public static function actionForm()
    {
        // check request: m
        $mode_or_url = Input::get('m', '');
        if ( ! in_array($mode_or_url, self::candidate())) Util::error('bad request.');

        // check request: p
        $yml = Yaml::fetch();
        $pcode = Input::get('p', '');
        if ( ! array_key_exists($pcode, $yml['processes'])) Util::error('bad request.');

        // dbio
        self::dbio($pcode, $mode_or_url);
        $current = Model\Process::fetch(Input::get('m', $mode_or_url), array(), true);
        $current = Arr::get($current, $pcode, array());

        View::assign('current', Arr::get($current, 'vals', array()));
        View::assign('p', $pcode);
        View::assign('m', $mode_or_url);
        View::assign('processes', $yml['processes'], false);
        View::assign('techs', $yml['techs']);
        View::assign('pages', Model\Page::fetchAll());
        View::assign('title', Util::key2code($pcode).': '.$yml['processes'][$pcode]['title']);
        View::assign('body',  View::fetchTpl('process/form.php'), FALSE);
    }

    /**
     * dbio
     *
     * @param String $pcode
     * @param String $mode_or_url
     * @return Void
     */
    private static function dbio($pcode, $mode_or_url)
    {
        if ( ! Input::isPostExists()) return;

        $value = array();
        $value[$pcode]['status'] = '';
        foreach (Input::postArr('vals') as $k => $v)
        {
            $value[$pcode]['vals'][$k] = Model\Data::filter($v, Model\Process::$each_fields);
        }
        if ($mode_or_url == 'common')
        {
            self::updateCommon($pcode, $value);
            return;
        }
        self::update($pcode, $mode_or_url, $value);
    }

    /**
     * candidate
     *
     * @return Array
     */
    private static function candidate()
    {
        $pages = array('common');
        foreach (Model\Page::fetchAll() as $v)
        {
            $pages[] = $v['url'];
        }
        return $pages;
    }

    /**
     * update common
     *
     * @param String $pcode
     * @param Array $value
     * @return Void
     */
    private static function updateCommon($pcode, $value)
    {
        foreach (self::candidate() as $v)
        {
            self::update($pcode, $v, $value, true);
        }
    }

    /**
     * update
     *
     * @param String $pcode
     * @param String $url
     * @param Array $value
     * @param Bool $is_common
     * @return Void
     */
    private static function update($pcode, $url, $value, $is_common = false)
    {
        $current = Model\Process::fetch($url, array(), true);
        $status = $is_common ? 'common' : 'done' ;
        $current_status = Arr::get(Arr::get($current, $pcode, array()), 'status', '');
        $value[$pcode]['status'] = $current_status == 'done' ? 'done' : $status;

        // insert
        if (empty($current))
        {
            Model\Process::insert($url, $value);
            return;
        }

        // update
        // don't change status which test was done
        Model\Process::update($url, $value);
    }
}