'untyped',
'name' => 'noname',
'name_prefix' => null,
'field_id' => null,
'wrap_id' => null,
'value' => null,
'default_value' => null,
'required' => false,
'css_class' => null,
'render_by' => null,
'render_for' => null,
'render_object_id' => null,
'conditional_logic' => null,
'conditional_logic_id' => null
);
public function addControl($name, $type = null){
return rs::addControl($name, $type, get_class($this));
}
public function parseOptions($options){
if(is_array($options)){
$options = array_merge($this->baseoptions, $this->default, $options);
$options['label'] = !empty($options['label']) ? $options['label'] : $options['name'];
$options['description'] = isset($options['description']) ? $options['description'] : null;
$options['value'] = $this->parseValue($options['value'], $options['default_value']);
$options['field_name'] = $options['name_prefix'] . $options['name'];
if(empty($options['field_id'])){
$options['field_id'] = rs::generateId($options['field_name']);
}
if(empty($options['wrap_id'])){
$options['wrap_id'] = $options['field_id'] . '-wrap';
}
if(isset($options['multiple']) && $options['multiple']){
$options['multiple'] = 'multiple ';
$options['field_name'] = $options['field_name'] . '[]';
}
$options['required'] = $options['required'] ? 'required ' : false;
$options['parsed'] = true;
return $options;
}
return false;
}
public function parseValue($value, $default = null){
return ($value === null || $value === RS_NOT_SET) ? $default : $value;
}
public function render(){}
public function loadFiles(){}
public function renderError($message = null){
if($message === null){
$message = 'Render control for ' . get_class($this) . ' error. Please check your options.';
}
echo '
' . esc_html($message) . '
';
}
public function convertRules($rules, $remove_null_rule = true){
$data = array();
foreach($rules as $key=>$value){
if(is_string($key)){
if($remove_null_rule && $value === null){
continue;
}
$logic = array();
if(strpos($key, ':not')){
$key = trim(str_replace(':not', '', $key));
$logic['not'] = ((string)$value);
}
else{
$logic['equal'] = ((string)$value);
}
if(strpos($key, ':i')){
$key = trim(str_replace(':i', '', $key));
$logic['i'] = true;
}
$data[$key] = isset($data[$key]) ? array_merge($logic, $data[$key]) : $logic;
}
}
return $data;
}
public function addConditionalLogic($options, $no_wrap = false){
$logic_id = $options['conditional_logic_id'];
$wrap_id = $no_wrap ? $options['field_id'] : $logic_id ? $logic_id : $options['wrap_id'];
$logic = $options['conditional_logic'];
$control_name = $options['name'];
if($options['type'] == 'checkbox' && count($options['items']) > 1){
self::addFieldReferent($options['name'], $options['field_name'] . '[]');
}
else{
self::addFieldReferent($options['name'], $options['field_name']);
}
if(is_array($logic)){
if(!is_array(reset($logic))){
$logic = array($logic);
}
$this_data = array();
foreach($logic as $i=>$rules){
$new_rules = array();
foreach($rules as $name=>$value){
if(strpos($name, '.')){
$names = explode('.', $name);
$name = '';
$base = array_shift($names);
if(preg_match("/$base\[(\d+|rsrowindex)\]/", $control_name, $match)){
$name .= $match[0];
}
while(count($names)){
$base = array_shift($names);
if(preg_match("/\[$base\]\[(\d+|rsrowindex)\]/", $control_name, $match)){
$name .= $match[0];
}
else{
$name .= '[' . $base . ']';
}
}
}
$new_rules[$name] = $value;
}
if($rules = self::convertRules($new_rules)){
$this_data[] = $rules;
}
}
if($this_data){
$data = rs::getJSData('conditional-logic');
$i = 1;
while(!$logic_id && isset($data[$wrap_id])){
$wrap_id = $wrap_id . '-' . $i++;
}
$data[$wrap_id] = $this_data;
rs::setJSData('conditional-logic', $data);
if(rs::isAjax()){
echo "";
}
}
}
return $logic_id ? $options['wrap_id'] : $wrap_id;
}
public function addFieldReferent($name, $fieldname){
if($name != $fieldname && $fieldname){
$referent = rs::getJSData('field-referent');
$referent[$name] = $fieldname;
rs::setJSData('field-referent', $referent);
}
}
public function getField($name, $post_id = null, $output = null){
global $post;
if(empty($post_id) && $post){
$post_id = $post->ID;
}
if(is_numeric($post_id)){
return self::getPostField($name, $post_id);
}
if($post_id && is_string($post_id)){
if(stripos($post_id, 'post') !== false){
return self::getPostField($name, str_ireplace('post_', '', $post_id));
}
elseif(stripos($post_id, 'category') !== false){
return self::getCatField($name, str_ireplace('category_', '', $post_id));
}
elseif(stripos($post_id, 'user') !== false){
return self::getUserField($name, str_ireplace('user_', '', $post_id));
}
elseif(stripos($post_id, 'option') !== false){
return self::getOption($name, false);
}
elseif(stripos($post_id, 'term') !== false){
$term = explode("_", $post_id);
return self::getTermField($name, $term[1]);
}
elseif($post){
$output = $post_id;
return self::getPostField($name, $post->ID);
}
}
return rs::message('Please check post_id parameter and/or post object.', get_class($this) . '::getField');
}
public function getPostField($name, $post_id){
return get_post_meta($post_id, RS_META_KEY_PREFIX . $name, true);
}
public function getPostFields($post_id){
$values = get_post_meta($post_id);
if(is_array($values)){
if(RS_META_KEY_PREFIX){
$result = array();
foreach($values as $key=>$value){
if(strpos($key, RS_META_KEY_PREFIX) === 0){
$result[str_replace(RS_META_KEY_PREFIX, '', $key)] = maybe_unserialize($value);
}
}
return $result;
}
return $values;
}
return array();
}
public function getCatField($name, $cat_id){
return self::getTermField($name, $cat_id);
}
public function getCatFields($cat_id){
return self::getTermFields($cat_id);
}
public function getTermField($name, $term_id){
$term_metas = get_option(RS_META_KEY_PREFIX . "taxonomy_{$term_id}_rs_metas");
if($term_metas){
$value = $term_metas[$name];
return $value;
}
return null;
}
public function getTermFields($term_id){
$term_metas = get_option(RS_META_KEY_PREFIX . "taxonomy_{$term_id}_rs_metas");
return is_array($term_metas) ? $term_metas : array();
}
public function getUserField($name, $user_id){
return get_user_meta($user_id, RS_META_KEY_PREFIX . $name, true);
}
public function getUserFields($user_id){
$values = get_user_meta($user_id);
if(is_array($values)){
if(RS_META_KEY_PREFIX){
$result = array();
foreach($values as $key=>$value){
if(strpos($key, RS_META_KEY_PREFIX) === 0){
$result[str_replace(RS_META_KEY_PREFIX, '', $key)] = maybe_unserialize($value);
}
}
return $result;
}
return $values;
}
return array();
}
public function getOption($name, $default = null){
return get_option(RS_META_KEY_PREFIX . $name, $default);
}
public function updateField($name, $value, $post_id = null){
if(!$post_id){
global $post;
$post_id = $post->ID;
}
if(is_numeric($post_id)){
return self::updatePostField($name, $value, $post_id);
}
else if(is_string($post_id)){
if(stripos($post_id, 'post') !== false){
return self::updatePostField($name, $value, str_ireplace('post_', '', $post_id));
}
elseif(stripos($post_id, 'category') !== false){
return self::updateCatField($name, $value, str_ireplace('category_', '', $post_id));
}
elseif(stripos($post_id, 'user') !== false){
return self::updateUserField($name, $value, str_ireplace('user_', '', $post_id));
}
elseif(stripos($post_id, 'option') !== false){
return self::updateOption($name, $value);
}
else{
$term = explode("_", $post_id);
return self::updateTermField($name, $value, $term[1]);
}
}
else{
return rs::message('Type of $post_id parameter is invalid.', get_class($this) . '::updateField', true);
}
}
public function updatePostField($name, $value, $post_id){
return update_post_meta($post_id, RS_META_KEY_PREFIX . $name, $value);
}
public function updateCatField($name, $value, $cat_id){
return updateTermField($name, $value, $cat_id);
}
public function updateTermField($name, $value, $term_id){
if($name){
$term_metas = get_option(RS_META_KEY_PREFIX . "taxonomy_{$term_id}_rs_metas");
if (!is_array($term_metas)) {
$term_metas = Array();
}
if(is_string($value)){
$value = str_replace("\'", "'", $value);
$value = str_replace('\"', '"', $value);
}
$term_metas[$name] = $value;
return update_option(RS_META_KEY_PREFIX . "taxonomy_{$term_id}_rs_metas", $term_metas );
}
else{
return update_option(RS_META_KEY_PREFIX . "taxonomy_{$term_id}_rs_metas", $value );
}
}
public function updateUserField($name, $value, $user_id){
return update_user_meta($user_id, RS_META_KEY_PREFIX . $name, $value);
}
public function updateOption($name, $value){
return update_option(RS_META_KEY_PREFIX . $name, $value);
}
}