Input::get('value'),
            'image' => Input::file('value'),
        ];
    }
    public function getListValueAttribute()
    {
        if((bool)$this->system === true) {
            $value = self::_fetch($this->key);
        } else {
            $value = self::fetch($this->key);
        }
        $this->value = $value;
        switch($this->type) {
            case 'image':
                if(!empty($this->value)) {
                    $value = ''.__('app.settings.view').'';
                } else {
                    $value = __('app.options.none');
                }    
                break;
            case 'boolean':
                if((bool)$this->value === true) {
                    $value = __('app.options.yes');
                } else {
                    $value = __('app.options.no');
                }    
                break;
            case 'select':
                if(!empty($this->value) && $this->value !== 'none') {
                    $options =  (array)json_decode($this->options);
                    $value = __($options[$this->value]);
                } else {
                    $value = __('app.options.none');
                }                
                break;
            default:
                $value = __($this->value);
                break;
        }
        return $value;
    }
    public function getEditValueAttribute()
    {
        if((bool)$this->system === true) {
            $value = self::_fetch($this->key);
        } else {
            $value = self::fetch($this->key);
        }
        $this->value = $value;
        switch($this->type) {
            case 'image':
                $value = '';
                if(isset($this->value) && !empty($this->value)) {
                    $value .= '.') ';
                }
                $value .= Form::file('value', ['class' => 'form-control']);
                if(isset($this->value) && !empty($this->value)) {
                    $value .= ''.__('app.settings.reset').'';
                }
                
                break;
            case 'boolean':
                $checked = false;
                if(isset($this->value) && (bool)$this->value === true) $checked = true;
                $set_checked = ($checked) ? ' checked="checked"' : '';
                $value = '
                
                ';
                break;
            case 'select':
                $options = json_decode($this->options);
                foreach($options as $key => $opt) {
                    $options->$key = __($opt);
                }
                $value = Form::select('value', $options, null, ['class' => 'form-control']);
                break;
            default:
                $value = Form::text('value', null, ['class' => 'form-control']);
                break;
        }
        return $value;
    }
    public function group()
    {
        return $this->belongsTo('App\SettingGroup', 'group_id');
    }
    /**
     * @param string $key
     *
     * @return mixed
     */
    public static function fetch($key)
    {
        $user = self::user();
        return self::_fetch($key, $user);
    }
    /**
     * @param string $key
     *
     * @return mixed
     */
    public static function _fetch($key, $user=null)
    {
        #$cachekey = ($user === null) ? $key : $key.'-'.$user->id;
        #if (Setting::cached($cachekey)) {
        #    return Setting::$cache[$cachekey];
        #} else {
            $find = self::where('key', '=', $key)->first();
            if (!is_null($find)) {
                if((bool)$find->system === true) { // if system variable use global value
                    $value = $find->value;
                } else { // not system variable so use user specific value
                    // check if user specified value has been set
                    //print_r($user);
                    $usersetting = $user->settings()->where('id', $find->id)->first();
                    //print_r($user->settings);
                    //die(var_dump($usersetting));
                    //->pivot->value;
                    //echo "user: ".$user->id." --- ".$usersettings;
                    if(isset($usersetting) && !empty($usersetting)) {
                        $value = $usersetting->pivot->uservalue;
                    } else { // if not get default from base setting
                        //$user->settings()->save($find, ['value' => $find->value]);
                        #$has_setting = $user->settings()->where('id', $find->id)->exists();
                        #if($has_setting) {
                        #    $user->settings()->updateExistingPivot($find->id, ['uservalue' => (string)$find->value]);
                        #} else {
                        #    $user->settings()->save($find, ['uservalue' => (string)$find->value]);
                        #}
                        $value = $find->value;
                    }
                    
                }
                #Setting::add($cachekey, $value);
                return $value;
            } else {
                return false;
            }
        #}
    }
    /**
     * @param string $key
     * @param $value
     */
    public static function add($key, $value)
    {
        Setting::$cache[$key] = $value;
    }
    /**
     * @param string $key
     *
     * @return bool
     */
    public static function cached($key)
    {
        return array_key_exists($key, Setting::$cache);
    }
    /**
     * The users that belong to the setting.
     */
    public function users()
    {
        return $this->belongsToMany('App\User')->using('App\SettingUser')->withPivot('uservalue');
    }
    public static function user()
    {
        return User::currentUser();
    }
}
';
                }
                $value .= Form::file('value', ['class' => 'form-control']);
                if(isset($this->value) && !empty($this->value)) {
                    $value .= ''.__('app.settings.reset').'';
                }
                
                break;
            case 'boolean':
                $checked = false;
                if(isset($this->value) && (bool)$this->value === true) $checked = true;
                $set_checked = ($checked) ? ' checked="checked"' : '';
                $value = '
                
                ';
                break;
            case 'select':
                $options = json_decode($this->options);
                foreach($options as $key => $opt) {
                    $options->$key = __($opt);
                }
                $value = Form::select('value', $options, null, ['class' => 'form-control']);
                break;
            default:
                $value = Form::text('value', null, ['class' => 'form-control']);
                break;
        }
        return $value;
    }
    public function group()
    {
        return $this->belongsTo('App\SettingGroup', 'group_id');
    }
    /**
     * @param string $key
     *
     * @return mixed
     */
    public static function fetch($key)
    {
        $user = self::user();
        return self::_fetch($key, $user);
    }
    /**
     * @param string $key
     *
     * @return mixed
     */
    public static function _fetch($key, $user=null)
    {
        #$cachekey = ($user === null) ? $key : $key.'-'.$user->id;
        #if (Setting::cached($cachekey)) {
        #    return Setting::$cache[$cachekey];
        #} else {
            $find = self::where('key', '=', $key)->first();
            if (!is_null($find)) {
                if((bool)$find->system === true) { // if system variable use global value
                    $value = $find->value;
                } else { // not system variable so use user specific value
                    // check if user specified value has been set
                    //print_r($user);
                    $usersetting = $user->settings()->where('id', $find->id)->first();
                    //print_r($user->settings);
                    //die(var_dump($usersetting));
                    //->pivot->value;
                    //echo "user: ".$user->id." --- ".$usersettings;
                    if(isset($usersetting) && !empty($usersetting)) {
                        $value = $usersetting->pivot->uservalue;
                    } else { // if not get default from base setting
                        //$user->settings()->save($find, ['value' => $find->value]);
                        #$has_setting = $user->settings()->where('id', $find->id)->exists();
                        #if($has_setting) {
                        #    $user->settings()->updateExistingPivot($find->id, ['uservalue' => (string)$find->value]);
                        #} else {
                        #    $user->settings()->save($find, ['uservalue' => (string)$find->value]);
                        #}
                        $value = $find->value;
                    }
                    
                }
                #Setting::add($cachekey, $value);
                return $value;
            } else {
                return false;
            }
        #}
    }
    /**
     * @param string $key
     * @param $value
     */
    public static function add($key, $value)
    {
        Setting::$cache[$key] = $value;
    }
    /**
     * @param string $key
     *
     * @return bool
     */
    public static function cached($key)
    {
        return array_key_exists($key, Setting::$cache);
    }
    /**
     * The users that belong to the setting.
     */
    public function users()
    {
        return $this->belongsToMany('App\User')->using('App\SettingUser')->withPivot('uservalue');
    }
    public static function user()
    {
        return User::currentUser();
    }
}