Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/croogo/croogo/Core/src/Database/Type/EncodedType.php
<?php

namespace Croogo\Core\Database\Type;

use
Cake\Database\Driver;
use
Cake\Database\Type;
use
PDO;

class
EncodedType extends Type
{

    public function
toPHP($value, Driver $driver)
    {
        if (empty(
$value) || $value === null) {
            return
$value;
        }

        return
$this->decodeData($value);
    }

    public function
marshal($value)
    {
        if (
is_string($value)) {
           
$value = explode("\n", $value);
        }
        if (
is_array($value) || $value === null) {
            return
$value;
        }

        return
$this->decodeData($value);
    }

    public function
toDatabase($value, Driver $driver)
    {
       
// Make it possible to do LIKE checks like %"1"%
       
if ((is_string($value)) && (preg_match('/\%\".*\"\%/', $value))) {
            return
$value;
        }

        return
$this->encodeData($value);
    }

    public function
toStatement($value, Driver $driver)
    {
        if (
$value === null) {
            return
PDO::PARAM_NULL;
        }

        return
PDO::PARAM_STR;
    }

   
/**
     * Encode data
     *
     * Turn array into a JSON
     *
     * @param array $data data
     * @param array $options (optional)
     * @return string
     */
   
public function encodeData($data, $options = [])
    {
       
$_options = [
           
'json' => false,
           
'trim' => true,
        ];
       
$options = array_merge($_options, $options);

        if (
is_array($data) && count($data) > 0) {
           
// trim
           
if ($options['trim']) {
               
$elements = [];
                foreach (
$data as $id => $d) {
                   
$d = trim($d);
                    if (
$d != '') {
                       
$elements[$id] = '"' . $d . '"';
                    }
                }
            } else {
               
$elements = $data;
            }

           
// encode
           
if (count($elements) > 0) {
                if (
$options['json']) {
                   
$output = json_encode($elements);
                } else {
                   
$output = '[' . implode(',', $elements) . ']';
                }
            } else {
               
$output = null;
            }
        } else {
           
$output = null;
        }

        return
$output;
    }

   
/**
     * Decode data
     *
     * @param string $data
     * @return array
     */
   
public function decodeData($data)
    {
        if (
$data == '') {
           
$output = '';
        } else {
           
$output = json_decode($data, true);
        }

        return
$output;
    }
}