jidaikobo-shibata/a11yc

View on GitHub
classes/Update/AddDataUtil.php

Summary

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

trait AddDataUtil
{
    /**
     * serialize2json
     *
     * @return Void
     */
    private static function serialize2json()
    {
        $sql = 'ALTER TABLE '.A11YC_TABLE_SETTINGS.' ADD `is_array` BOOL NOT NULL DEFAULT 0;';
        Db::execute($sql);

        $serializeds = array(
            'additional_criterions',
            'non_exist_and_passed_criterions',
            'non_use_techs',
        );
        foreach ($serializeds as $serialized)
        {
            $sql = 'SELECT `version` FROM '.A11YC_TABLE_SETTINGS.' GROUP BY `version`;';

            foreach (Db::fetchAll($sql) as $v)
            {
                $version = $v['version'];

                $sql = 'SELECT * FROM '.A11YC_TABLE_SETTINGS.' WHERE `key` = ? AND `version` = ?;';
                $results = Db::fetchAll($sql, array($serialized, $version));
                $results['value'] = empty($results['value']) ? array() : $results['value'];
                unset($results['version']);
                $vals = array(
                    'key'      => $serialized,
                    'value'    => $results['value'],
                    'version'  => $version,
                );
                self::insertSettings($vals);
            }
        }
    }

    /**
     * insert
     * old settings' insert method
     *
     * @param Array $vals
     * @return Bool
     */
    public static function insertSettings($vals)
    {
        $is_array = false;
        if (is_array($vals['value']))
        {
            $vals['value'] = json_encode($vals['value']);
            $is_array = true;
        }

        $sql = 'INSERT INTO '.A11YC_TABLE_SETTINGS.' (';
        $sql.= '`key`,';
        $sql.= '`value`,';
        $sql.= '`is_array`,';
        $sql.= '`version`';
        $sql.= ')';
        $sql.= ' VALUES (?, ?, ?, ?);';
        return Db::execute(
            $sql,
            array(
                Arr::get($vals, 'key', ''),
                Arr::get($vals, 'value', ''),
                $is_array,
                Arr::get($vals, 'version', 0), // do not intval()
            )
        );
    }

    /**
     * initKeysByCriterions
     *
     * @return Array
     */
    private static function initKeysByCriterions()
    {
        $vals = array();
        $criterions = Yaml::each('criterions');
        foreach (array_keys($criterions) as $criterion)
        {
            $vals[$criterion] = array();
        }
        return $vals;
    }

    /**
     * versionArray
     *
     * @param Array $versions
     * @return Array
     */
    private static function versionArray($versions)
    {
        return empty($versions) ? array(0 => array('version' => 0)) : $versions ;
    }
}