forked from croogo/croogo
/
EncoderBehavior.php
88 lines (80 loc) · 1.62 KB
/
EncoderBehavior.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
/**
* Encoder Behavior
*
* PHP version 5
*
* @category Behavior
* @package Croogo
* @version 1.0
* @author Fahad Ibnay Heylaal <contact@fahad19.com>
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
* @link http://www.croogo.org
*/
class EncoderBehavior extends ModelBehavior {
public function setup(Model $model, $config = array()) {
if (is_string($config)) {
$config = array($config);
}
$this->settings[$model->alias] = $config;
}
/**
* Encode data
*
* Turn array into a JSON
*
* @param object $model model
* @param array $data data
* @param array $options (optional)
* @return string
*/
public function encodeData(&$model, $data, $options = array()) {
$_options = array(
'json' => false,
'trim' => true,
);
$options = array_merge($_options, $options);
if (is_array($data) && count($data) > 0) {
// trim
if ($options['trim']) {
$elements = array();
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 = '';
}
} else {
$output = '';
}
return $output;
}
/**
* Decode data
*
* @param object $model model
* @param string $data data
* @return array
*/
public function decodeData(&$model, $data) {
if ($data == '') {
$output = '';
} else {
$output = json_decode($data, true);
}
return $output;
}
}