Source of file EncryptedDBJson.php
Size: 3,358 Bytes - Last Modified: 2021-12-23T10:00:31+00:00
/var/www/docs.ssmods.com/process/src/src/EncryptedDBJson.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | <?php namespace LeKoala\Encrypt; use SilverStripe\Forms\HiddenField; /** * A simple extension over EncryptedDBText that supports json * as a datastructure * The data is stored in a text field * * If you want to access array stuff, you need to use * $model->dbObject('myField')->toArray() or any other method * * This field is a great way to store serialized encrypted data */ class EncryptedDBJson extends EncryptedDBText { /** * We cannot search on json fields * * @param string $title * @return HiddenField */ public function scaffoldSearchField($title = null) { return HiddenField::create($this->getName()); } /** * Json data is not easily displayed * * @param string $title * @param string $params * @return HiddenField */ public function scaffoldFormField($title = null, $params = null) { return HiddenField::create($this->getName()); } /** * @return mixed */ public function decode() { if (!$this->value) { return false; } return json_decode($this->value); } /** * @return array */ public function decodeArray() { if (!$this->value) { return []; } return json_decode($this->value, JSON_OBJECT_AS_ARRAY); } /** * @return array */ public function toArray() { return $this->decodeArray(); } /** * @return string */ public function pretty() { return json_encode(json_decode($this->value), JSON_PRETTY_PRINT); } /** * @inheritDoc */ public function saveInto($dataObject) { if ($this->value && is_array($this->value)) { $this->value = json_encode($this->value); } parent::saveInto($dataObject); } /** * Add a value * * @link https://stackoverflow.com/questions/7851590/array-set-value-using-dot-notation * @param string|array $key * @param string $value * @return $this */ public function addValue($key, $value) { $currentValue = $this->decodeArray(); if (!is_array($key)) { $key = [$key]; } $arr = &$currentValue; foreach ($key as $idx) { if (!isset($arr[$idx])) { $arr[$idx] = []; } $arr = &$arr[$idx]; } $arr = $value; return $this->setValue($currentValue); } /** * Internally, the value is always a json string * * @param mixed $value * @param DataObject $record * @param boolean $markChanged * @return $this */ public function setValue($value, $record = null, $markChanged = true) { if (is_array($value)) { $value = json_encode($value); } return parent::setValue($value, $record, $markChanged); } /** * @inheritDoc */ public function prepValueForDB($value) { if (is_array($value)) { $value = json_encode($value); } return parent::prepValueForDB($value); } /** * We return false because we can accept array and convert it to string * @return boolean */ public function scalarValueOnly() { return false; } } |