items; if (!is_array($original_items) || count ($original_items) == 0) return false; $this->settings_fields = $settings_fields; if (!is_array( $general_settings)) { $this->general_settings = []; } else { $this->general_settings = $general_settings; } $items = array_map(function ($object) { if (is_object($object)) { return clone $object; } else { return $object; } }, $original_items); $items = $this->filter_by_edit_variables($items); $array_thead = array_shift($items); /** * @var Array $first_row */ $first_row = []; $primaries = $table_model->get_pirmaries(); foreach ($array_thead as $key => $value) { $row_sorting = true; $schema = (isset($value['schema'])) ? $value['schema'] : $key; if (is_object($schema)) { if (@$schema->type != "CUSTOM") { $field_key = $this->get_column_name($schema, 'alias'); $simple_type = $schema->type; } else { $field_key = $schema->name; $row_sorting = false; $simple_type = "gen"; } } else { $row_sorting = false; $simple_type = "gen"; $field_key = ''; } $original_field_name = $this->get_column_name($schema, 'column'); $name_column = ADFO_fn::clean_string($field_key); $orgtable = (isset($schema->orgtable)) ? $schema->orgtable : ''; $orgname = (isset($schema->orgname)) ? $schema->orgname : ''; $table = (isset($schema->table)) ? $schema->table : ''; if (is_array($value) && array_key_exists('setting', $value) && isset($value['setting']->title)) { $print_column_name = $value['setting']->title; } else { $print_column_name = $key; } if (is_array($value) && array_key_exists('setting', $value) ) { $width = $this->get_width_class($value['setting']); } else { $width = ""; } $drop_down = is_object($schema); if (isset($settings_fields[$key])) { $print_column_name =$settings_fields[$key]->title; $drop_down = ($settings_fields[$key]->view == "CUSTOM") ? false : $drop_down; } $pri = ($table != "" && isset($primaries[$orgtable]) && strtolower($primaries[$orgtable]) == strtolower($orgname)); /** * Questa è l'intestazione finale delle colonne della tabella */ $first_row[$key] = (object)['name'=>$print_column_name, 'original_table' => $orgtable, 'table' => $table, 'name_column'=>$name_column, 'original_name' => $orgname,'field_key'=>$field_key, 'original_field_name'=>$original_field_name,'toggle'=>(isset($value['toggle']) ? $value['toggle'] : 'SHOW'), 'type'=> $simple_type, 'sorting'=>$row_sorting, 'dropdown' => $drop_down, 'width'=>$width, 'align'=>@$value['align'], 'mysql_name' => @$value['mysql_name'], 'name_request' => @$value['name_request'], 'searchable' => @$value['searchable'], 'custom_param' => @$value['custom_param'], 'format_values' => @$value['format_values'], 'format_styles' => @$value['format_styles'], 'pri'=>$pri, 'is_multiple' => $settings_fields[$key]->is_multiple]; } $count = 0; foreach ($items as $count=>&$item) { $item = (object)$item; //PinaCode::set_var('data', $item); foreach ($array_thead as $key => $setting) { $count++; $key = is_numeric($key) ? (int)$key : (string)$key; // se il campo è numerico lo converto in intero altrimenti duplica il valore in una nuova colonna if (isset($setting['schema']) && ($setting['schema']->type =="WP_HTML" || $setting['schema']->type =="CHECKBOX")) { if (is_object($item)) { if (isset($item->$key)) { $value = $item->$key; } else { $value = ""; } } else { if (isset($item[$key])) { $value = $item[$key]; } else { $value = ""; } } $item->$key = $value; } else if ($key != "" && isset($item->$key)) { PinaCode::set_var("data", $item); $original_value = "____af__".$key; $item->$original_value = $item->$key; $item->$key = $this->edit_singe_cell($item, $key, $setting, $count, $table_model, $dbp_id); } else { $item->$key = $this->edit_singe_cell($item, $key, $setting, $count, $table_model, $dbp_id); } } } array_unshift($items, $first_row); return $items; } /** * Nell'elenco di una lista gestisce i parametri di visualizzazione dei campi della tabella * aggiunge i filtri e converte il type */ private function filter_by_edit_variables($items) { // la prima riga posso togliere i campi che non voglio visualizzare reset($items); $first_key = key($items); $new_first_key = []; if (is_array($this->settings_fields) && count ($this->settings_fields) > 0) { foreach ( $this->settings_fields as $key=>$setting) { if (array_key_exists($key, $items[$first_key])) { $new_first_key[$key] = $items[$first_key][$key]; } else { $new_first_key[$key] = ['schema'=>(object)['type'=>'CUSTOM', 'name'=>$key]]; } $new_first_key[$key]['setting'] = $setting; if ($setting->isset('view') && $setting->view != "") { $new_first_key[$key]['schema']->type = $setting->view; } else { $new_first_key[$key]['schema']->type = ADFO_fn::h_type2txt($new_first_key[$key]['schema']->type); } $new_first_key[$key]['align'] = $setting->align; $new_first_key[$key]['order'] = $setting->order; $new_first_key[$key]['toggle'] = $setting->toggle; $new_first_key[$key]['name_request'] = $setting->name_request; $new_first_key[$key]['mysql_name'] = $setting->mysql_name; $new_first_key[$key]['searchable'] = $setting->searchable; $new_first_key[$key]['custom_param'] = $setting->custom_param; $new_first_key[$key]['format_values'] = $setting->format_values; $new_first_key[$key]['format_styles'] = $setting->format_styles; if ( $setting->view == 'LOOKUP') { $new_first_key[$key]['lookup_id'] = $setting->lookup_id; $new_first_key[$key]['lookup_sel_val'] = $setting->lookup_sel_val; $new_first_key[$key]['lookup_sel_txt'] = $setting->lookup_sel_txt; } } $items[$first_key] = $new_first_key; $columns = array_column($items[$first_key], 'order'); array_multisort($columns, SORT_ASC, $items[$first_key]); } else { foreach ($items[$first_key] as $key=>$value) { if (isset($value['schema']) && is_object($value['schema'])) { $items[$first_key][$key]['schema']->type = ADFO_fn::h_type2txt($value['schema']->type); } } } return $items; } /** * Fa il rendering dei singoli campi delle tabelle * @param $item * @param $key * @param $setting * @param $count * @param ADFO_model $table_model * @param $dbp_id */ private function edit_singe_cell($item, $key, $setting, $count, $table_model, $dbp_id) { global $wpdb; /** * @var String $value */ if (is_object($item)) { if (isset($item->$key)) { $value = $item->$key; } else { $value = ""; } } else { if (isset($item[$key])) { $value = $item[$key]; } else { $value = ""; } } $value = html_entity_decode($value); $max_char_show = $this->max_text_length(); $export_csv = $this->export_csv(); if (isset($setting['setting']) && is_object($setting['setting'])) { if (@$setting['setting']->view == "DATE") { if (isset($setting['custom_param']) && $setting['custom_param'] != "") { $date_format = $setting['custom_param']; } else { $date_format = get_option('date_format'); } if ($value == '0000-00-00 00:00:00' || $value == '0000-00-00') { $value = '-'; } else { $time = strtotime($value); if ($time !== false) { $value = date($date_format, strtotime($value)); } } $max_char_show = 2000; } else if (@$setting['setting']->view == "DATETIME" || (@$setting['setting']->view == "" && $setting['schema']->type=="DATE")) { if (isset($setting['custom_param']) && $setting['custom_param'] != "") { $date_format = $setting['custom_param']; } else { $date_format = get_option('date_format')." ".get_option('time_format'); } if ($value == '0000-00-00 00:00:00' || $value == '0000-00-00') { $value = '-'; } else { $time = strtotime($value); if ($time !== false) { $value = date($date_format, strtotime($value)); } } $max_char_show = 2000; } else if (@$setting['setting']->view == "TIME") { $hour = floor($value / 3600); $min = floor(($value - ($hour*3600)) / 60 ); $value = str_pad($hour,2,'0', STR_PAD_LEFT).':'.str_pad($min,2,'0', STR_PAD_LEFT); $max_char_show = 40; } else if (@$setting['setting']->view == "SERIALIZE") { $max_char_show = -1; $value = maybe_unserialize($value); if (is_object($value) || is_array($value)) { $value = $this->show_obj($value, 1, $this->max_text_length(), $this->max_depth()); } else { $value2 = json_decode($value, true); if (json_last_error() == JSON_ERROR_NONE) { $value = $this->show_obj($value2, 1, $this->max_text_length(), $this->max_depth()); } } } else if (@$setting['setting']->view == "JSON_LABEL") { $max_char_show = -1; $values = json_decode($value, true); $format_values = ADFO_fn::parse_csv_options($setting['format_values']); if (json_last_error() == JSON_ERROR_NONE) { $new_labs = []; if (is_array($values)) { foreach ($values as $leb_key => $lab) { if (is_array($format_values)) { foreach($format_values as $fvv) { if (!isset($fvv['label']) && isset($fvv['value'])) { $fvv['label'] = $fvv['value']; } if ((isset($fvv['value']) && $fvv['value'] == $lab) || (isset($fvv['label']) && $fvv['label'] == $lab)) { $lab = $fvv['label']; break; } } } $new_labs[] = ''.$lab.''; } } $value = implode(" ", $new_labs); } } else if (@$setting['setting']->view == "TEXT" || @$setting['setting']->view == "VARCHAR" || @$setting['setting']->view == "") { $value = $this->html_entities($value); if (isset($setting['custom_param']) && $setting['custom_param'] > 0) { $max_char_show = $setting['custom_param'] ; } } else if (@$setting['setting']->view == "HTML") { $max_char_show = 20000; } else if (@$setting['setting']->view == "LINK" ) { $max_char_show = 2000; if (isset($setting['custom_param']) && $setting['custom_param'] != "" ) { $link_text = PinaCode::execute_shortcode($setting['custom_param']); } else { $link_text = $value ; } if (filter_var($value, FILTER_VALIDATE_URL) && $export_csv == false ) { $value = ''.$this->html_entities($link_text).''; } } else if(@$setting['setting']->view == "_POST_LINK" && $dbp_id > 0) { $custom_key = $setting['setting']->custom_param; if ($export_csv == false) { $value = ''.$value.''; } else { $value = get_permalink($item->$custom_key); } $max_char_show = 2000; } else if(@$setting['setting']->view == "PERMALINK" && $dbp_id > 0) { $custom_key = $setting['setting']->custom_param; if ($export_csv == false) { $value = ''.$value.''; } $max_char_show = 2000; } else if(@$setting['setting']->view == "_USER_LINK" && $dbp_id > 0) { $custom_key = $setting['setting']->custom_param; if ($export_csv == false) { $value = ''.$value.''; } else { $value = get_author_posts_url($item->$custom_key); } $max_char_show = 2000; } else if(@$setting['setting']->view == "DETAIL_LINK" && $dbp_id > 0) { $max_char_show = 2000; $primary_values = []; $primary_values['dbp_ids'] = ADFO_fn::ids_url_encode($table_model, $item); $primary_values['dbp_id'] = $dbp_id; $primary_values['action'] = 'dbp_get_detail'; $link = esc_url(add_query_arg($primary_values, admin_url('admin-ajax.php'))); $content_value = $value; if ($export_csv == false) { $value = '' .strip_tags($value).''; $value = apply_filters('adfo_frontend_build_custom_link',$value, $dbp_id, $primary_values, $content_value, $link) ; } else { $value = $link; } } else if(@$setting['setting']->view == "ORDER" && $dbp_id > 0) { if ($export_csv) { $value = (int)strip_tags($value); } else if (strpos($_SERVER['REQUEST_URI'], 'wp-admin/admin.php') !== false) { $order = ($table_model->get_partial_query_order()); $add_sort = false; if (count($order) == 2 ) { if ($order[1] == 'ASC' && $setting['setting']->mysql_name == $order[0]) { $add_sort = true; } } // filter[sort][field]: `posord`.`meta_value` if ($add_sort) { $value = ' '; } else { //
".$setting['setting']->custom_code." =". PinaCode::execute_shortcode('[%data.ID]')."
"; //$value = "CC : ".$setting['setting']->custom_code; $value = PinaCode::execute_shortcode($setting['setting']->custom_code); if (is_object($value) || is_array($value)) { $value = $this->show_obj($value,1, $this->max_text_length(), $this->max_depth()); } } } else { if (!$export_csv) { $value = $this->html_entities($value); } } if (strlen($value) > $max_char_show && $max_char_show > -1) { if (isset($this->general_settings['htmlentities']) && $this->general_settings['htmlentities'] == true) { $value = substr($value,0 , floor($max_char_show))." ..."; } else { $value = substr(strip_tags($value),0 , floor($max_char_show))." ..."; } } $value = ADFO_fn::column_formatting_convert($setting['format_values'], $value, $value); return $value; } /** * Stampo un array o un oggetto in una cella */ static public function show_obj($obj, $depth = 1, $max_char_show = 1000, $max_depth = 10, $max_count = 10) { if (is_object($obj) || is_array($obj)) { $new_v = []; $count_row = 0; foreach ($obj as $k=>$v) { $count_row++; if ($count_row > $max_count) { if (is_object($obj)) { $obj = (array)$obj; } $new_v[] = '