[Back] <?php
class OsMetaModel extends OsModel{
var $id,
$meta_key,
$meta_value,
$object_id,
$created_at,
$updated_at;
protected static $encrypted_settings = array();
function __construct($object_id = false){
$this->nice_names = array();
$this->object_id = $object_id;
parent::__construct();
}
public function delete_by_key($meta_key, $object_id){
if(!$object_id) return false;
$meta_to_delete = $this->where(array('meta_key' => $meta_key, 'object_id' => $object_id))->get_results_as_models();
if($meta_to_delete){
foreach($meta_to_delete as $meta_obj){
$meta_obj->delete();
}
}
return true;
}
public function save_by_key($meta_key, $meta_value, $object_id = false){
if(!$object_id) $object_id = $this->object_id;
if(!$object_id) return false;
$existing_meta = $this->where(array('meta_key' => $meta_key, 'object_id' => $object_id))->set_limit(1)->get_results_as_models();
if($existing_meta){
$existing_meta->meta_value = self::prepare_value($meta_key, $meta_value);
if (empty($existing_meta->meta_value)) {
return $existing_meta->delete();
}
return $existing_meta->save();
}else{
$new_meta = $this;
$new_meta->object_id = $object_id;
$new_meta->meta_key = $meta_key;
$new_meta->meta_value = self::prepare_value($meta_key, $meta_value);
return $new_meta->save();
}
}
private static function prepare_value($meta_key, $meta_value){
if(in_array($meta_key, self::$encrypted_settings)){
$meta_value = OsEncryptHelper::encrypt_value($meta_value);
}
return $meta_value;
}
public function get_by_key($meta_key, $object_id = false, $default = false){
if(!$object_id) $object_id = $this->object_id;
if(!$object_id) return $default;
$record = $this->where(array('meta_key' => $meta_key, 'object_id' => $object_id))->set_limit(1)->get_results_as_models();
if($record){
if(in_array($meta_key, self::$encrypted_settings)){
return OsEncryptHelper::decrypt_value($record->meta_value);
}else{
return $record->meta_value;
}
}else{
return $default;
}
}
public function get_by_object_id($object_id = false, $default = []){
if(!$object_id) $object_id = $this->object_id;
if(!$object_id) return $default;
$records = $this->where(array('object_id' => $object_id))->get_results();
if($records){
$metas = [];
foreach($records as $record){
$value = in_array($record->meta_key, self::$encrypted_settings) ? OsEncryptHelper::decrypt_value($record->meta_value) : $record->meta_value;
$metas[$record->meta_key] = $value;
}
return $metas;
}else{
return $default;
}
}
public function get_object_id_by_value($meta_key, $meta_value){
if(!$meta_value || !$meta_key) return false;
$record = $this->select('object_id')->where(array('meta_key' => $meta_key, 'meta_value' => $meta_value))->set_limit(1)->get_results_as_models();
if($record){
return $record->object_id;
}else{
return false;
}
}
protected function allowed_params($role = 'admin'){
$allowed_params = array('object_id',
'meta_key',
'meta_value');
return $allowed_params;
}
protected function params_to_save($role = 'admin'){
$params_to_save = array('object_id',
'meta_key',
'meta_value');
return $params_to_save;
}
protected function properties_to_validate(){
$validations = array(
'object_id' => array('presence'),
'meta_key' => array('presence'),
'meta_value' => array('presence'),
);
return $validations;
}
}