function form($instance)
 {
     global $extrp_settings, $extrp_sanitize;
     $data = $extrp_sanitize->big_data();
     if ($instance) {
         $instance = $extrp_sanitize->sanitize($instance);
         foreach ($data as $key => $value) {
             $normal = isset($instance[$value['parameter']]) ? $instance[$value['parameter']] : $value['normal'];
             $data[$key]['id'] = $value['id'];
             $data[$key]['normal'] = $normal;
             $data[$key]['parameter'] = $value['parameter'];
             $data[$key]['optional'] = $value['optional'];
             $data[$key]['subtitle'] = $value['subtitle'];
             $data[$key]['description'] = $value['description'];
             $data[$key]['group'] = $value['group'];
             $data[$key]['subgroup'] = $value['subgroup'];
             $data[$key]['lang'] = $value['lang'];
         }
     }
     $key = array_keys($data);
     $plugin_data = get_plugin_data(EXTRP_PLUGIN_FILE);
     $plugin_version = 'v' . $plugin_data['Version'];
     printf('<div class="extrp-widget-form"><label for="%1$s" class="hidden">%2$s</label><input id="%1$s" name="%3$s" type="hidden" value="%2$s" />', $this->get_field_id('title_extrp'), esc_html($plugin_version), $this->get_field_name('title_extrp'));
     foreach ($key as $id) {
         $subtitle = $data[$id]['subtitle'];
         $parameter = $data[$id]['parameter'];
         $normal = $data[$id]['normal'];
         $optional = $data[$id]['optional'];
         $description = $data[$id]['description'];
         if ('post_date' == $parameter) {
             $input_field = '';
             if (!is_array($normal)) {
                 $normal = array($normal);
             }
             foreach ($optional as $k => $v) {
                 $checked = in_array($k, $normal) ? 'checked="checked"' : '';
                 $desc = !empty($v) ? $v : $k;
                 $input_field .= sprintf('<input id="%1$s" name="%2$s" type="checkbox" value="%3$s" %4$s><label for="%1$s">%5$s</label><br>', $this->get_field_id($parameter . '_' . $k), $this->get_field_name($parameter . '_' . $k), esc_attr($k), $checked, ucwords(esc_attr($desc)));
             }
             printf('<p><label for="%1$s">%2$s</label><br>%3$s', $this->get_field_id($parameter), $subtitle, $input_field);
         }
         if ('subtitle' == $parameter || 'titlerandom' == $parameter) {
             printf('<p><input id="%1$s" name="%2$s" type="text" value="%3$s" /> <label for="%1$s">%4$s</label></p>', $this->get_field_id($parameter), $this->get_field_name($parameter), sanitize_text_field($normal), $subtitle);
         }
         if ('posts' == $parameter || 'maxchars' == $parameter) {
             printf('<p><input class="small-text" id="%1$s" name="%3$s" type="number" value="%4$s" /> <label for="%1$s">%2$s</label></p>', $this->get_field_id($parameter), $subtitle, $this->get_field_name($parameter), sanitize_text_field($normal));
         }
         if ('post__in' == $parameter || 'post__not_in' == $parameter) {
             printf('<p><label for="%1$s">%2$s</label><textarea class="large-text" id="%1$s" name="%3$s">%4$s</textarea></p>', $this->get_field_id($parameter), $subtitle, $this->get_field_name($parameter), $extrp_sanitize->data_textarea($normal));
         }
         if ('relatedby' == $parameter || 'postheading' == $parameter || 'display' == $parameter || 'shape' == $parameter || 'image_size' == $parameter || 'highlight' == $parameter) {
             printf('<p><select id="%1$s" name="%2$s" class="%3$s-select">', $this->get_field_id($parameter), $this->get_field_name($parameter), sanitize_html_class($parameter));
             if ('image_size' == $parameter) {
                 $selected = false == $normal ? 'selected="selected"' : '';
                 printf('<option value="%1$s" %2$s>%3$s</option>', false, $selected, __('No Thumbnail', 'extrp'));
             }
             foreach ($optional as $k => $v) {
                 $classhl = '';
                 if ('image_size' == $parameter || 'highlight' == $parameter) {
                     $val = $k;
                 } else {
                     $val = $v;
                 }
                 $selected = $normal == $val ? 'selected="selected"' : '';
                 if ('highlight' == $parameter) {
                     $classhl .= 'class="select-' . $k . '"';
                     $selected = $extrp_sanitize->highlight($normal)['hl'] == $val ? ' selected="selected"' : '';
                 }
                 printf('<option %1$s value="%2$s" %3$s>%4$s</option>', $classhl, sanitize_text_field($val), $selected, ucwords(esc_attr($val)));
             }
             printf('</select> <label for="%1$s">%2$s</label></p>', $this->get_field_id($parameter), $subtitle);
             if ('highlight' == $parameter) {
                 echo extrp_hl_input($extrp_sanitize->highlight($normal), sanitize_key($parameter), $optional, $this->get_field_name('add'));
             }
         }
         if ('single' == $parameter || 'post_title' == $parameter || 'desc' == $parameter || 'randomposts' == $parameter || 'crop' == $parameter || 'relevanssi' == $parameter || 'post_excerpt' == $parameter) {
             $selected = true == $normal ? 'checked="checked"' : '';
             printf('<p><input type="checkbox" id="%1$s" name="%2$s" value="%3$s" class="widget-%4$s" %5$s/> <label for="%1$s"><span>%6$s</span></label> ', $this->get_field_id($parameter), $this->get_field_name($parameter), true, sanitize_html_class($parameter), $selected, $subtitle);
             printf('</p>');
         }
     }
     printf('</div>');
 }
 public function field_cb($args)
 {
     global $extrp_settings, $extrp_data;
     $id = $args['id'];
     $parameter = $extrp_data[$id]['parameter'];
     $input_field = extrp_checkbox($parameter);
     $optional = $extrp_data[$id]['optional'];
     $description_field = $extrp_data[$id]['description'];
     $additional_field = '';
     switch ($parameter) {
         case 'active':
             $input_field = extrp_checkbox($parameter);
             break;
         case 'post_type':
         case 'post_date':
             $input_field = extrp_multiple_checkbox($parameter, $optional);
             break;
         case 'relatedby':
         case 'display':
         case 'image_size':
         case 'shape':
         case 'post_excerpt':
         case 'highlight':
             $input_field = extrp_selected_input($parameter, $optional);
             if ('display' == $parameter || 'shape' == $parameter) {
                 $additional_field = extrp_sample_preview($parameter, $optional);
             }
             if ('highlight' == $parameter) {
                 $additional_field = extrp_hl_input($extrp_settings[$parameter], $parameter, $optional, 'extrp_option');
             }
             break;
         case 'noimage':
             $input_field = extrp_upload_input($parameter, $description_field);
             $description_field = $description_field['main_desc'];
             break;
         case 'customsize':
             $input_field = extrp_multiple_input_text($parameter, $optional, $description_field);
             $description_field = $description_field['main_desc'];
             break;
         case 'posts':
         case 'maxchars':
         case 'expire':
         case 'schedule':
             $input_field = extrp_input_type($parameter, 'number');
             if ('schedule' == $parameter) {
                 $description_field = implode('</br>', $description_field);
             }
             break;
         case 'heading':
         case 'postheading':
             $input_field = extrp_multiple_radio($parameter, $optional);
             break;
         case 'subtitle':
         case 'titlerandom':
             $input_field = extrp_input_type($parameter, 'text');
             break;
         case 'stopwords':
         case 'post__in':
         case 'post__not_in':
             $input_field = extrp_textarea($parameter);
             break;
         case 'relevanssi':
         case 'cache':
             $description_field = implode('</br>', $description_field);
             break;
         default:
             $input_field = extrp_checkbox($parameter);
             $additional_field = '';
             break;
     }
     printf('%1$s<p class="description">%2$s</p>%3$s', $input_field, $description_field, $additional_field);
 }