items; * @param ADFO_list_setting[] $list_setting * @return ADFO_list_setting[] */ static function get_list_structure_config($model_items, $list_setting) { if (!is_array($model_items) || count($model_items) == 0) return false; //$columns = array_column($list_setting, 'order'); //array_multisort($columns, SORT_ASC, $list_setting); uasort($list_setting, function($a, $b) { if (!is_a($a, 'admin_form\ADFO_list_setting')|| !is_a($b, 'admin_form\ADFO_list_setting') ) return 0; return $a->order <=> $b->order; }); // Imposta rispetto alla list_setting l'elenco delle colonne $temp_items_2 = array_shift($model_items); if (!is_array($temp_items_2) || count($temp_items_2) == 0) return false; $count = 799; /** * @var ADFO_list_setting[] $temp_items */ $temp_items = []; ADFO_functions_list::private_add_name_request($temp_items_2); if (is_array($temp_items_2)) { foreach ($temp_items_2 as $key=>$item) { $temp_list_structue = new ADFO_list_setting(); foreach ($item['schema'] as $ki =>$vi) { $temp_list_structue->$ki = $vi; } $count++; $temp_list_structue->type = ADFO_fn::h_type2txt($item['schema']->type); $temp_list_structue->title = $item['schema']->name; $temp_list_structue->toggle = 'SHOW'; $temp_list_structue->view = ADFO_fn::h_type2txt($item['schema']->type); $temp_list_structue->custom_code = ''; $temp_list_structue->order = $count; $temp_list_structue->origin = 'FIELD'; if ($temp_list_structue->view ==' NUMERIC') { $temp_list_structue->searchable = '='; } else { $temp_list_structue->searchable = 'LIKE'; } $temp_list_structue->mysql_name = ADFO_functions_list::private_get_mysql_name($item['schema']); if (isset($item['schema']->orgtable)) { $temp_list_structue->mysql_table = $item['schema']->orgtable; } if ($temp_list_structue->mysql_name == "") { $temp_list_structue->searchable = 'no'; } $temp_list_structue->custom_param = ''; $temp_list_structue->format_values = ''; $temp_list_structue->format_styles = ''; $temp_list_structue->inherited = 0; $temp_items[$key] = $temp_list_structue; } } /** * @var ADFO_list_setting[] $temp_items */ $items = []; foreach ($list_setting as $key => $column_setting) { if (is_array($column_setting)) { $column_setting = (new ADFO_list_setting())->set_from_array($column_setting); } if (array_key_exists($key, $temp_items)) { $items[$key] = $temp_items[$key]; unset($temp_items[$key]); } else if ($column_setting->type == "CUSTOM") { $items[$key] = (new ADFO_list_setting())->set_from_array(['name'=>$key,'type'=>'CUSTOM', 'origin'=>'CUSTOM', 'mysql_name'=>'', 'mysql_table'=>'', 'name_request'=>'']); $column_setting->view = 'CUSTOM'; } else { continue; } if (is_a($column_setting, 'admin_form\ADFO_list_setting')) { $column_setting_array = $column_setting->get_array(); } foreach ($column_setting_array as $ks=>$vs) { if ($vs != "" && !in_array($ks, ['type','name','orgname','table','orgtable','mysql_name','mysql_table'])) { $items[$key]->$ks = $vs; } } } return array_merge($items, $temp_items); } /** * Trova il post e converte il content con i default * [list_setting] la struttura dei singoli campi della lista sia frontend che backend * [list_general_setting] le impostazioni della lista (sia frontend che backend) * [frontend_view] * @param int $post_id * @return object; */ static function get_post_dbp($post_id) { if (absint($post_id) == 0) return false; $post = get_post(absint($post_id)); if (!$post || $post->post_status != 'publish') return false; if (is_object($post)) { $post->post_content = get_post_meta($post_id, '_dbp_list_config', true); if (!$post) return false; if ($post->post_type != 'dbp_list') return false; $post->post_content = self::convert_post_content_to_list_params($post->post_content); return $post; } else { return false; } } /** * Tutte le volte che c'è get_post_dbp poi dovrei chiamare questa funzione */ static function no_post_dbp($post) { if (!is_object($post) || $post == false || $post == null) { die(__('The list does not exist', 'admin_form')); } } /** * Converte il post_content nella struttura della lista * * @param string $post_content * @return array */ static function convert_post_content_to_list_params($post_content = '') { global $wpdb; ADFO_fn::require_init(); $content = maybe_unserialize($post_content); if (is_object($content)) { $content = (array)$content; } if (!is_array($content)) { $content = []; } if (!array_key_exists('list_setting', $content)) { $content['list_setting'] = []; } else { $new_list_setting = []; if (is_array($content['list_setting'])) { foreach ($content['list_setting'] as $key=>$list ) { $new_list_setting[$key] = (new ADFO_list_setting())->set_from_array($list); } } $content['list_setting'] = $new_list_setting; } if (!array_key_exists('frontend_view', $content)) { $content['frontend_view'] = []; } if (!array_key_exists('list_general_setting', $content)) { $content['list_general_setting'] = ['text_length' => 80, 'obj_depth'=>3]; } if (!array_key_exists('form', $content)) { $content['form'] = []; } $content['sql_from'] = (isset($content['sql_from'])) ? $content['sql_from'] : []; if (array_key_exists('sql', $content)) { $content['sql'] = wp_unslash($content['sql']); } else if (isset($content['sql_from'])) { $table_model = new ADFO_model($content['sql_from']); $content['sql'] = $table_model->get_current_query(); } else { $content['sql'] = ''; } if (!array_key_exists('primaries', $content) || !is_array($content['primaries'])) { $content['primaries'] = []; } if (!array_key_exists('schema', $content) || !is_array($content['schema'])) { $content['schema'] = []; } $content['post_status'] = isset($content['post_status']) ? $content['post_status'] : []; $content['post_status']['permission'] = isset($content['post_status']['permission']) ? $content['post_status']['permission'] : ['editor'=>'editor', 'author'=>'author', 'contributor'=>'contributor', 'subscriber'=>'subscriber', 'guest'=>'guest']; $content['show_desc'] = isset($content['show_desc']) ? $content['show_desc'] : 0; if (array_key_exists('delete_params', $content)) { if (!is_a($content['delete_params'], 'admin_form\dbpDs_list_delete_params') ) { $content['delete_params'] = new DbpDs_list_delete_params($content['delete_params']); } } else { $content['delete_params'] = new DbpDs_list_delete_params(); } /** * POST TYPE * @since 1.7.0 Aggiunti i tipi di form. * type = choose_table_from_db|create_new_post_type|create_new_table|'' * todo pro aggiungere from_query * post_type = [name=>'','slug'=>''] */ if (!in_array($wpdb->posts, $content['sql_from'])) { $content['post_type'] = ['name'=>'','slug'=>'']; } else { if (isset($content['post_type']) && !is_array($content['post_type'])) { $content['post_type'] = []; } $content['post_type']['name'] = (isset($content['post_type']['name'])) ? $content['post_type']['name'] : ''; $content['post_type']['slug'] = (isset($content['post_type']['slug'])) ? $content['post_type']['slug'] : $content['post_type']['name']; } $content['type'] = (isset($content['type'])) ? $content['type'] : ''; /** * @sinse 2.0 * Aggiungo la proprietà is_multiple se è una lista e il campo è multiplo */ foreach ($content['list_setting'] as $k=>$sett) { if (is_array($sett)) { $sett = (object)$sett; } foreach ($content['form'] as $post_form) { if ($sett->name == $post_form['name'] && $sett->table == $post_form['table'] && isset($post_form['is_multiple']) && $post_form['is_multiple'] == 1) { $content['list_setting'][$k]->is_multiple = 1; } } } return $content; } /** * torna tutte le colonne di tutte le tabelle interessate in una query * @param array $item La prima riga dei risultati di una query di ADFO_model NON Convertiti in update_items_with_setting */ static function get_all_fields_from_query($item) { global $wpdb; $tables = $fields = []; foreach ($item as $e) { if (!array_key_exists($e['schema']->orgtable, $tables)) { $tables[$e['schema']->orgtable] = $wpdb->get_results('SHOW COLUMNS FROM `'.ADFO_fn::sanitize_key($e["schema"]->orgtable).'`'); } if (!array_key_exists($e['schema']->table, $fields)) { $temp_list =[]; foreach ($tables[$e['schema']->orgtable] as $tso) { $temp_list[] = '`' . $e['schema']->table . '`.`' . $tso->Field . '`'; } $fields[$e['schema']->table] = $temp_list; } } } /** * Inserisce nella query di table_model il limit, l'order ed eventuali filtri * @param array $post_content * @return ADFO_model */ public static function get_model_from_list_params($post_content) { $sql = $post_content['sql']; if ( $sql != "") { $table_model = new ADFO_model(); $table_model->prepare($sql); if ($table_model->sql_type() == "select") { if (isset($post_content['sql_limit'])) { $table_model->limit = (int)$post_content['sql_limit']; } if (isset($post_content['sql_order'])) { if (isset($post_content['sql_order']['field']) && isset($post_content['sql_order']['sort'])) { $table_model->list_add_order($post_content['sql_order']['field'], $post_content['sql_order']['sort']); } } // aggiungo eventuali dbp_extra_attr if (isset($_REQUEST['dbp_extra_attr'])) { $dbp_extra_attr = wp_kses_post(wp_unslash($_REQUEST['dbp_extra_attr'])); $extra_attr = json_decode(base64_decode( $dbp_extra_attr ), true); if (json_last_error() == JSON_ERROR_NONE) { if (isset($extra_attr['request'])) { foreach ($extra_attr['request'] as $key=>$val) { $_REQUEST[$key] = $val; } pinacode::set_var('request', $extra_attr['request']); } if (isset($extra_attr['params'])) { $params = (array)PinaCode::get_var('params'); $params = array_merge($extra_attr['params'], $params); PinaCode::set_var('params', $params); } if (isset($extra_attr['data'])) { pinacode::set_var('data', $extra_attr['data']); } } } if (isset($post_content['sql_filter']) && is_array($post_content['sql_filter'])) { $table_model->list_add_where($post_content['sql_filter'], 'AND', false); } return $table_model; } return false; } else { return false; } } /** * estraggo le variabili pinacode dei filtri request, params * @TODO da rivedere ora che i params vengono passati dentro la funzione stessa... * @param array $post_content * @return array; */ public static function get_extra_params_from_list_params($sql_filter) { $extra_value_pina = []; if (isset($sql_filter) && is_array($sql_filter)) { $shortcode_param = []; $shortcode_request = []; $shortcode_data = []; foreach ($sql_filter as $filter) { if (isset($filter['value'])) { $shortcode_param = array_merge($shortcode_param, ADFO_functions_list::get_pinacode_params($filter['value'])); $shortcode_request = array_merge($shortcode_request, ADFO_functions_list::get_pinacode_params($filter['value'],'[%request')); $shortcode_data = array_merge($shortcode_data, ADFO_functions_list::get_pinacode_params($filter['value'],'[%data')); } } $param = PinaCode::execute_shortcode('[%params]'); if (is_array($param)) { foreach ($shortcode_param as $val) { if (isset($param[$val])) { $temp = $param[$val]; if ($temp != '' && !is_countable($temp)) { if (!isset($extra_value_pina['params'])) { $extra_value_pina['params'] = []; } $extra_value_pina['params'][$val] = $temp; } } } } $param = PinaCode::execute_shortcode('[%request]'); if (is_array($param)) { foreach ($shortcode_request as $val) { if (isset($param[$val])) { $temp = $param[$val]; if ($temp != '' && !is_countable($temp)) { if (!isset($extra_value_pina['request'])) { $extra_value_pina['request'] = []; } $extra_value_pina['request'][$val] = $temp; } } } } $param = PinaCode::execute_shortcode('[%data]'); if (is_array($param)) { foreach ($shortcode_data as $val) { $temp = $param[$val]; if ($temp != '' && !is_countable($temp)) { if (!isset($extra_value_pina['data'])) { $extra_value_pina['data'] = []; } $extra_value_pina['data'][$val] = $temp; } } } } return $extra_value_pina; } /** * Funzione per aggiungere limit (paginazione), order e altri where nel frontend. Il risultato lo mette dentro il model. * @param ADFO_model $table_model * @param array $post_content Il content della lista * @param int $list_id L'id della list * @param string $prefix Nelle chiamate post/get/ajax sceglie un prefisso per non impicciarsi */ static function add_frontend_request_filter_to_model(&$table_model, $post, $list_id, $prefix = "") { global $wpdb; if ($prefix == "") { $request_path = "dbp".$list_id; } else { $request_path = $prefix; } $post_content = $post->post_content; $list_settings = $post_content['list_setting']; $table_model->get_count(); $table_limit = $table_model->limit; $table_limit_start = ADFO_fn::get_request_limit_start( $request_path .'_page', 1, ceil( $table_model->total_items / $table_limit )) ; if ($table_limit_start == 0) { $limit_start = 0; } else { $limit_start = ($table_limit_start -1) * $table_limit; } $table_model->list_add_limit($limit_start, $table_limit); // order $table_sort = ADFO_fn::get_request($request_path . '_sort', false); if ($table_sort) { $sorts = explode(".", $table_sort); if (count($sorts) > 1) { $table_sort_order = array_pop($sorts); $table_sort_field = ADFO_fn::get_val_from_head_column_name($list_settings, implode(".",$sorts), 'mysql_name' ); if ($table_sort_field != "") { $table_model->list_add_order($table_sort_field, $table_sort_order); } } } // search $search = wp_unslash(ADFO_fn::get_request($request_path . '_search', false)); if ($search) { $filter =[] ; //[[op:'', column:'',value:'' ], ... ]; foreach ($list_settings as $list_setting) { if ($list_setting->is_multiple == 1) { if ($list_setting->view == 'USER') { $user = $wpdb->get_row("SELECT * FROM wp_users WHERE (ID = ".intval($search)." OR user_login = '".esc_sql($search)."' OR user_email = '".esc_sql($search)."' OR user_nicename = '".esc_sql($search)."') LIMIT 1"); if ($user) { $filter[] = ['op'=>'LIKE', 'column'=> $list_setting->mysql_name, 'value' =>'"'.$user->ID.'"']; } } if ($list_setting->view == 'POST' || $list_setting->view == 'MEDIA_GALLERY') { $post = $wpdb->get_row("SELECT * FROM wp_posts WHERE (ID = ".intval($search)." OR post_title = '".esc_sql($search)."' OR post_name = '".esc_sql($search)."') LIMIT 1"); if ($post) { $filter[] = ['op'=>'LIKE', 'column'=> $list_setting->mysql_name, 'value' =>'"'.$post->ID.'"']; } } if ($list_setting->view == 'LOOKUP') { $table = '`'.esc_sql($list_setting->lookup_id).'`'; $id = $list_setting->lookup_sel_val; $sel = ""; if (is_array($list_setting->lookup_sel_txt)) { $sels = []; foreach ($list_setting->lookup_sel_txt as $value) { $sels[] = '`'.esc_sql($value).'` LIKE "'.esc_sql($search).'%"'; } $sel = implode(" OR ",$sels); $sql = "SELECT ".$id." as val FROM $table WHERE ".implode(" OR ",$sels)." LIMIT 1"; $ris = $wpdb->get_row($sql); if ($ris) { $filter[] = ['op'=>'LIKE', 'column'=> $list_setting->mysql_name, 'value' =>'"'.$ris->val.'"']; } } } } else { // sono le colonne generate in più da altri lookup if ($list_setting->view == '') { continue; } if ($list_setting->searchable == "LIKE" && $list_setting->mysql_name != "") { $filter[] = ['op'=>'LIKE', 'column'=> $list_setting->mysql_name, 'value' =>$search]; } if ($list_setting->searchable == "=" && $list_setting->mysql_name != "") { $filter[] = ['op'=>'=', 'column'=> $list_setting->mysql_name, 'value' =>$search]; } } } if (count($filter) > 0) { $table_model->list_add_where($filter, 'OR'); } } $filter =[] ; //[[op:'', column:'',value:'' ], ... ]; $request = ADFO_fn::sanitize_text_recursive($_REQUEST); foreach ($request as $req=>$req_val) { if (substr($req,0, strlen($request_path)) == $request_path && $req != $request_path . '_search') { $request_field = substr($req, strlen($request_path)+1); $filter_temp = ADFO_fn::convert_head_column_in_filter_array($list_settings, $request_field, $req_val); if ($filter_temp != false) { $filter[] =$filter_temp ; } } } if (count($filter) > 0) { $table_model->list_add_where($filter, 'AND'); } $search = wp_unslash(ADFO_fn::get_request($request_path . '_search', false)); } /** * In una stringa pinacode trova le variabili [%params.xxx] che sono le variabili scelti per gli shortcode * * @param string $string * @param string $shortcode il parametro da cercare * @return array */ public static function get_pinacode_params($string, $shortcode='[%params') { $start = 0; $shortcode_param = []; $length = strlen($shortcode)+1; do { $find = stripos($string, $shortcode, $start); if ($find !== false) { $end1 = stripos($string, ' ', $find + $length); $end2 = stripos($string,']', $find + $length); if ($end1 !== false && $end2 !== false) { $end = min($end1, $end2); } else if ($end1 !== false) { $end = $end1; } else { $end = $end2; } $param = trim(substr($string, $find + $length, $end - ($find + $length))); if (strlen($param) > 1 && strpos($param, ".") === false) { $shortcode_param[] = $param; } $start = $end+1; } } while ($find !== false); return $shortcode_param; } /** * Stampo il modulo per selezionare le categorie nel campo post * @param int $catId * @param int $depth * @param int $count_field * @param array $selected_cats * @return string */ static function form_categ_tree($catId, $depth, $count_field, $selected_cats){ $depth += 1; $output =''; $args = 'hierarchical=1&taxonomy=category&hide_empty=0&parent='; $categories = get_categories($args . $catId); if(count($categories) > 0) { foreach ($categories as $category) { if (is_array($selected_cats)) { $checked = (in_array($category->cat_ID, $selected_cats)) ? ' checked="checked"' : ''; } else { $checked = ""; } $output .= ''; $output .= self::form_categ_tree($category->cat_ID, $depth, $count_field, $selected_cats); } } return $output; } /** * Stampo il modulo per selezionare i ruoli nel campo post * @param int $count_field * @param array $selected_cats * @return string */ static function form_user_roles( $count_field, $selected_roles){ global $wp_roles; $roles = $wp_roles->roles; $output = ""; foreach ($roles as $key=>$rl) { if (is_array($selected_roles)) { $checked = (in_array($key, $selected_roles)) ? ' checked="checked"' : ''; } else { $checked = ""; } $output .= ''; } return $output; } /** * il nome del campo così non lo devo ricalcolare ogni volta, ma soprattutto lo salvo sul list_setting per convertire i parametri della ricerca e del search nei request * @param object $item */ private static function private_get_mysql_name($item) { if (@$item->orgname != "" && $item->table != "" ) { $original_field_name = '`'.$item->table.'`.`'.$item->orgname.'`'; } else if (@$item->orgname != "" && $item->orgtable ) { $original_field_name = '`'.$item->orgtable.'`.`'.$item->orgname.'`'; } else if (@$item->orgname != "" ) { $original_field_name = '`'.$item->orgname.'`'; } else { $original_field_name = ''; } return $original_field_name; } /** * Gli passo tutto un array come riferimento l'header di $model->get_list e ci aggiunge la variabile name_request * Il namerequest serve perché quando invio una richiesta da un form questo è il nome del campo che invio */ private static function private_add_name_request(&$temp_items_2) { $names = array(); foreach ($temp_items_2 as &$item_o) { $item = $item_o['schema']; $calculate_name = ""; if ($item->name != "") { $temp_exp = explode("_", str_replace(" ","_", $item->name)); if (count($temp_exp) == 1) { $name1 = ADFO_functions_list::private_clean(6, $item->name ); } else { $first = array_shift($temp_exp); $name1 = ADFO_functions_list::private_clean(4, implode("", $temp_exp), $first ); } $name2 = ADFO_functions_list::private_clean(15, $item->name); $name3 = ADFO_functions_list::private_clean(4, $item->name, $item->table); $name4 = ADFO_functions_list::private_clean(8, $item->name, $item->table); if ( !in_array($name1, $names) ) { $calculate_name = $name1; } elseif (!in_array($name2, $names) ) { $calculate_name = $name2; } elseif ($item->table != "" && !in_array( $name3, $names) ) { $calculate_name = $name3 ; } elseif ($item->table != "" && !in_array( $name4, $names) ) { $calculate_name = $name4 ; } } if (in_array( $calculate_name, $names) || $calculate_name == "") { $calculate_name = ADFO_fn::clean_string(ADFO_fn::get_uniqid()); } $item_o['schema']->name_request = $calculate_name; $names[] = $calculate_name; } } /** * @param int $substr * @param string $var1 * @param string $var2 * @return string */ private static function private_clean($substr, $var1, $var2 = "") { $var1 = substr(ADFO_fn::clean_string($var1), 0, $substr); if ($var2 != "") { $var2 = substr(ADFO_fn::clean_string($var2), 0, $substr); return $var2."_".$var1; } return $var1; } /** * Salva i dati di una query o di una lista nel database * * @param Array $query_to_execute * ```json * {"action":"string", "table":"string", "sql_to_save":"array", "id": "array", "table_alias":"string", "pri_val":"string", "pri_name":"string", "setting" : "array"} * ``` * @param $dbp_id la lista da salvare * @param string $origin Un testo che viene passato ai filtri * @param Boolean $use_wp_fn Se usare le funzioni di wordpress * wp_update_post & wp_update_user quando si aggiornano/creano utenti e post * @return array * ```json * {"action":"string", "result":"boolean", "table":"string", "table_alias":"string, "id":"int", "error"=>"string", "sql":"array"}; * ``` */ static public function execute_query_savedata($query_to_execute, $dbp_id = 0, $origin = "", $use_wp_fn = true) { global $wpdb; $queries_executed = []; if (count($query_to_execute) > 0) { $metadata_table = ''; if ($dbp_id > 0) { $query_to_execute = apply_filters('adfo_save_data', $query_to_execute, $dbp_id, $origin); $post = ADFO_functions_list::get_post_dbp($dbp_id); if ($post == false) { return false; } if (isset($post->post_content['sql_metadata_table'])) { $metadata_table_temp = explode("::", $post->post_content['sql_metadata_table']); if (count($metadata_table_temp) == 2) { $metadata_table = $metadata_table_temp[1]; } } } // prima faccio gli insert, e li trasformo in update, poi rieseguo tutto con update! foreach ($query_to_execute as $key=>$qtx) { ADFO_admin_loader::$saved_queries->change = []; $query_to_execute[$key]['already_inserted'] = false; foreach ($qtx['sql_to_save'] as $le => $val) { if (is_countable($val)) { $qtx['sql_to_save'][$le] = \maybe_serialize($val); } } if ($qtx['action'] == 'insert') { if ($qtx['table'] == $wpdb->posts && $use_wp_fn) { if (isset($qtx['sql_to_save']['ID'])) { unset($qtx['sql_to_save']['ID']); } remove_action( 'post_updated', 'wp_save_post_revision' ); remove_action('pre_post_update', 'wp_save_post_revision');// stop revisions if (!isset($qtx['sql_to_save']['post_author']) || $qtx['sql_to_save']['post_author'] == "") { $qtx['sql_to_save']['post_author'] = get_current_user_id(); } $ris_insert = wp_insert_post($qtx['sql_to_save']); add_action('pre_post_update', 'wp_save_post_revision');// enable revisions add_action( 'post_updated', 'wp_save_post_revision' ); if( is_wp_error( $ris_insert ) ) { $error = $ris_insert->get_error_message(); $ris_insert = false; } } else if ($qtx['table'] == $wpdb->users && $use_wp_fn) { if (isset($qtx['sql_to_save']['ID'])) { unset($qtx['sql_to_save']['ID']); } $ris_insert = wp_insert_user($qtx['sql_to_save']); if( is_wp_error( $ris_insert ) ) { $error = $ris_insert->get_error_message(); $ris_insert = false; } } else if ($metadata_table == $qtx['table'] && isset($qtx['sql_to_save']['meta_key']) && isset($qtx['sql_to_save']['meta_value'])) { $query_to_execute[$key]['action'] = 'insert_meta'; continue; } else { $ris_insert = ($wpdb->insert($qtx['table'], $qtx['sql_to_save'])) ? $wpdb->insert_id : false; $error = $wpdb->last_error; } if ($ris_insert == false) { $queries_executed[] = ['action'=>'insert', 'result'=>false, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>-1, 'error'=>$wpdb->last_error, 'sql' => $qtx['sql_to_save'], 'query'=>'']; } else { PinaCode::set_var(ADFO_fn::clean_string($qtx['table_alias']).".".$qtx['pri_name'], $ris_insert); $queries_executed[] = ['action'=>'insert', 'result'=>true, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>$ris_insert, 'error'=>'', 'sql' => $qtx['sql_to_save'], 'query'=>implode("
",ADFO_admin_loader::$saved_queries->change)]; $query_to_execute[$key]['action'] = 'update'; $query_to_execute[$key]['pri_val'] = $ris_insert; $query_to_execute[$key]['id']= [$qtx['pri_name'] => $ris_insert]; $query_to_execute[$key]['already_inserted'] = true; $query_to_execute[$key]['sql_to_save'] = $qtx['sql_to_save']; // TODO se non ci sono campi calcolati è inutile rifare l'update!!! } } } foreach ($query_to_execute as $key => $qtx) { $error = ''; if ($dbp_id > 0 && isset($qtx['setting']) && is_countable($qtx['setting'])) { foreach ($qtx['setting'] as $setting) { if ( $setting->form_type == "CALCULATED_FIELD") { // print ("\n CALCULATED FIELD"); // aggiungo i campi calcolati Le variabili pinacode devono essere state già impostate! if ( $setting->custom_value_calc_when == "EVERY_TIME" || ($setting->custom_value_calc_when == "EMPTY" && (!isset($qtx['sql_to_save'][$setting->name]) || $qtx['sql_to_save'][$setting->name] == "" || empty($qtx['sql_to_save'][$setting->name]))) ) { $qtx['sql_to_save'][$setting->name] = PinaCode::execute_shortcode($setting->custom_value); // print ("\n EXECUTE CALC (".$setting->name.") ".$setting->custom_value ." = ".$qtx['sql_to_save'][$setting->name]); } } if ( $setting->form_type == "TIME") { $time_temp = explode(":", $qtx['sql_to_save'][$setting->name]); if (count($time_temp) == 2 && is_numeric($time_temp[0]) && is_numeric($time_temp[1])) { $qtx['sql_to_save'][$setting->name] = ($time_temp[0] * 3600) + ($time_temp[1] * 60); } } } } foreach ($qtx['sql_to_save'] as $sql_key => $val) { if (is_countable($val)) { $qtx['sql_to_save'][$sql_key] = \maybe_serialize($val); } $qtx['sql_to_save'][$sql_key] = PinaCode::execute_shortcode( $val ); } ADFO_admin_loader::$saved_queries->change = []; if ($qtx['action'] == 'update') { PinaCode::set_var(ADFO_fn::clean_string($qtx['table_alias']).".".$qtx['pri_name'], $qtx['pri_val']); if ($qtx['table'] == $wpdb->posts && $use_wp_fn) { $qtx['sql_to_save']['ID'] = $qtx['pri_val']; remove_action( 'post_updated', 'wp_save_post_revision' ); remove_action('pre_post_update', 'wp_save_post_revision');// stop revisions $ris_update = wp_update_post($qtx['sql_to_save']); add_action('pre_post_update', 'wp_save_post_revision');// enable revisions again add_action( 'post_updated', 'wp_save_post_revision' ); if( is_wp_error( $ris_update ) ) { $error = $ris_update->get_error_message(); $ris_update = false; } } else if ($qtx['table'] == $wpdb->users && $use_wp_fn) { $qtx['sql_to_save']['ID'] = $qtx['pri_val']; $ris_update = wp_update_user($qtx['sql_to_save']); if( is_wp_error( $ris_update ) ) { $error = $ris_update->get_error_message(); $ris_update = false; } } else { $ris_update = $wpdb->update($qtx['table'], $qtx['sql_to_save'], $qtx['id']); $error = $wpdb->last_error; } if (!$query_to_execute[$key]['already_inserted']) { if ($ris_update == false) { $queries_executed[] = ['action'=>'update', 'result'=>false, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>$qtx['pri_val'], 'error'=>$error, 'sql' => $qtx['sql_to_save'], 'query'=>'']; } else { $queries_executed[] = ['action'=>'update', 'result'=>true, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>$qtx['pri_val'], 'error'=>'', 'sql' => $qtx['sql_to_save'], 'query'=> implode("
",ADFO_admin_loader::$saved_queries->change)]; } } } if ($qtx['action'] == 'delete') { $rows = $wpdb->delete( $qtx['table'], $qtx['id']); $error = $wpdb->last_error; if ($rows > 0) { $queries_executed[] = ['action'=>'delete', 'result'=>true, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>$qtx['pri_val'], 'error'=>'', 'query'=>implode("
",ADFO_admin_loader::$saved_queries->change)]; } else { $queries_executed[] = ['action'=>'delete', 'result'=>false, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>$qtx['pri_val'], 'error'=> $error, 'query'=>implode("
",ADFO_admin_loader::$saved_queries->change)]; } } if ($qtx['action'] == 'insert_meta') { $remove = $qtx['sql_to_save']; unset($remove['meta_value']); if (count($remove) == 2) { $wpdb->delete($qtx['table'], $remove); } $ris_insert = ($wpdb->insert($qtx['table'], $qtx['sql_to_save'])) ? $wpdb->insert_id : false; $error = $wpdb->last_error; if ($ris_insert == false) { $queries_executed[] = ['action'=>'insert meta', 'result'=>false, 'table'=>$qtx['table'], 'table_alias'=>$qtx['table_alias'], 'id'=>$qtx['pri_val'], 'error'=>$error, 'sql' => $qtx['sql_to_save'], 'query'=>'']; } } } } return $queries_executed; } /** * Aggiunge eventuali lookup alla query sql * @param ADFO_model $table_model * @param object $post */ static function add_lookups_column(&$table_model, &$post) { $lookups = false; $new_select = []; foreach ($post->post_content['list_setting'] as $key => $setting) { if ($setting->is_multiple == 1) continue; if ($setting->view == "LOOKUP" && $setting->lookup_sel_val != '' && is_countable($setting->lookup_sel_txt) ) { $lookups = true; // lookup_id: // tabella da aggiungere // lookup_sel_val: primary key // lookup_sel_txt: i campi da aggiungere // mysql_name la colonna da comparare con ` ??? $query = $table_model->get_current_query(); $alias = 'lk_'.ADFO_fn::get_table_alias($key, $query); $pri = '`'.esc_sql($alias).'`.`'.esc_sql($setting->lookup_sel_val).'`'; $table_model->list_add_from(' LEFT JOIN `'.esc_sql($setting->lookup_id).'` `'.$alias.'` ON '.esc_sql($setting->mysql_name).' = '.$pri); foreach ($setting->lookup_sel_txt as $new_field) { $new_alias = $key."_".ADFO_fn::clean_string($new_field); $new_select[] = '`'.esc_sql($alias).'`.`'.esc_sql($new_field).'` AS `'.esc_sql($new_alias).'`'; } } } // devo sostituire tutti i select mancano i campi non legati a tabelle (e i campi aggiunti con custom_value?!) if ($lookups) { $table_model->list_add_select(implode(', ', $new_select)); } } /** * Aggiunge il post_type alla query sql * @param ADFO_model $table_model * @param object $post * @since 1.7.0 */ static function add_post_type_settings(&$table_model, $post, $frontend = false) { $current_post_alias = self::get_post_type_alias($post); if ($current_post_alias != '') { $table_model->list_add_where( [['op'=>'=', 'column' => '`'.$current_post_alias.'`.`post_type`', 'value' => $post->post_content['post_type']['name'] ]], 'AND', false); } if ($frontend) { if (ADFO_functions_list::has_post_status($post)) { $post_status_field = ADFO_functions_list::get_post_status_field($post); $table_model->list_add_where( [['op'=>'=', 'column' => $post_status_field, 'value' => 'publish' ]], 'AND', false); } } } /** * @since 1.7.0 * Solo in amministrazione serve per gestire il publish, draft e trash * @param ADFO_model $table_model * @param object $post */ static function add_post_type_status(&$table_model, $post, $post_status = '') { $post_status_field = self::get_post_status_field($post); $post_author_field = self::get_post_author_field($post); // var_dump($user_roles); //print ("USER ROLE: ".$user_role); if ($post_author_field != '') { $user = wp_get_current_user(); $user_role = ADFO_functions_list::get_user_role($post); if ($user_role == 'contributor') { $table_model->list_add_where( [['op'=>'=', 'column' => $post_author_field, 'value' => $user->ID ]], 'AND', false); } else if ($user_role == 'author') { $table_model->list_add_where( [['op'=>'=', 'column' => $post_author_field, 'value' => $user->ID ]], 'AND', false); } else if ($user_role != 'editor' && $user_role != 'administrator') { // se non hai un ruolo valido non puoi vedere nulla ?! $table_model->list_add_where( [['op'=>'=', 'column' => '"1"', 'value' => '2' ]], 'AND', false); } } if ($post_status_field != '') { if ($post_status == 'trash'){ $table_model->list_add_where( [['op'=>'=', 'column' => $post_status_field, 'value' => 'trash' ]], 'AND', false); } else if ($post_status == 'draft'){ $table_model->list_add_where( [['op'=>'=', 'column' => $post_status_field, 'value' => 'draft' ]], 'AND', false); } else if ($post_status == 'publish'){ $table_model->list_add_where( [['op'=>'=', 'column' => $post_status_field, 'value' => 'publish' ]], 'AND', false); } else if ($post_status == 'pending'){ $table_model->list_add_where( [['op'=>'=', 'column' => $post_status_field, 'value' => 'pending' ]], 'AND', false); } else { $table_model->list_add_where( [['op'=>'!=', 'column' => $post_status_field, 'value' => ['trash'] ]], 'AND', false); } //print "

".$table_model->get_current_query()."

"; } } /** * @since 1.7.0 * Restituisce l'alias della tabella post se esiste. Lo posso usare per verifivare se * una lista è un tipo post type valido * @param object $post * @params string $return = 'mysql_name' | 'alias' | 'field' * @return mixed */ static function get_post_status_field($post, $return = 'mysql_name') { global $wpdb; if (isset($post->post_content['form']) && is_array($post->post_content['form'])) { foreach ($post->post_content['form'] as $field) { if ($field['form_type'] == 'POST_STATUS') { if ($return == 'field') { return $field; } else if ($return == 'mysql_name') { return '`'.$field['table'].'`.`'.$field['name'].'`'; } else if ($return == 'alias') { return $field['name']; } } } } return ''; } /** * @since 1.7.0 * Restituisce l'alias della tabella post se esiste. Lo posso usare per verifivare se * una lista è un tipo post type valido * @param object $post * @params string $return = 'mysql_name' | 'alias' | 'field' * @return string */ static function get_post_author_field($post, $return = 'mysql_name') { global $wpdb; if (isset($post->post_content['form']) && is_array($post->post_content['form'])) { foreach ($post->post_content['form'] as $field) { if ($field['form_type'] == 'RECORD_OWNER') { if ($return == 'field') { return $field; } else if ($return == 'mysql_name') { return '`'.$field['table'].'`.`'.$field['name'].'`'; } else if ($return == 'alias') { return $field['name']; } } } } return ''; } /** * @since 1.7.0 * Restituisce l'alias della tabella post se esiste. Lo posso usare per verifivare se * una lista è un tipo post type valido * @param object $post * @return string */ static function get_post_type_alias($post) { global $wpdb; if ($post->post_content['post_type']['name'] == '' ) return; $count_post_tables = 0; $current_post_alias = ''; if (isset($post->post_content['sql_from']) && is_array($post->post_content['sql_from'])) { foreach ($post->post_content['sql_from'] as $alias => $from) { if ($from == $wpdb->posts) { $current_post_alias = $alias; $count_post_tables++; } } } if ($count_post_tables != 1) return ''; return $current_post_alias; } /** * Trovo dentro form se c'è un campo di tipo post_status * @since 1.7.0 * @param object $post * @return boolean */ static function has_post_status($post) { if (isset($post->post_content['form']) && is_array($post->post_content['form'])) { foreach ($post->post_content['form'] as $field) { if ($field['form_type'] == 'POST_STATUS') { return true; } } } return false; } /** * Trovo dentro form se c'è un campo di tipo author * @since 1.7.0 * @param object $post * @return boolean */ static function has_post_author($post) { if (isset($post->post_content['form']) && is_array($post->post_content['form'])) { foreach ($post->post_content['form'] as $field) { if ($field['form_type'] == 'RECORD_OWNER') { return true; } } } return false; } /** * Trovo dentro form se c'è un campo di tipo order * @since 1.8.0 * @params string $return = 'mysql_name' | 'alias' | 'field' * @return mixed */ static function get_order_field($post, $return = 'mysql_name') { if (isset($post->post_content['form']) && is_array($post->post_content['form'])) { foreach ($post->post_content['form'] as $field) { if ($field['form_type'] == 'ORDER') { if ($return == 'field') { return $field; } else if ($return == 'mysql_name') { return '`'.$field['table'].'`.`'.$field['name'].'`'; } else if ($return == 'alias') { return $field['name']; } } } } return ''; } /** * Ritorna il gruppo di un utente considerando che a seconda del post type inserito è possibile * cambiare quale gruppo ha i permessi di contributor, quali di author e quali di editor. * Se non ha questi permessi né quello di amministratore ritorna una stringa vuota * @since 1.7.0 */ static function get_user_role($post) { $user = wp_get_current_user(); $user_roles = $user->roles; if (!self::has_post_author($post) ) { return (in_array('administrator', $user_roles)) ? 'administrator' : ''; } $permission = isset($post->post_content['post_status']['permission']) ? $post->post_content['post_status']['permission'] : []; $user_role = ''; $default_role = ''; $none = 0; foreach ($permission as $convert_role => $role) { if ($role == '_no_body') { $none++; } if ($role == '_all_others') { $default_role = $convert_role; } if (in_array($role, $user_roles)) { $user_role = $convert_role; break; } } if ($user_role == '' && $default_role != '') { $user_role = $default_role; } if (in_array('administrator', $user_roles)) { $user_role = 'administrator'; } if ($none == count($permission)) { $user_role = 'editor'; } return $user_role; } /** * @since 1.7.0 * @param object $post * @param ADFO_model $table_model * @return boolean */ static function count_table_by_status($post) { global $wpdb; $sql = $post->post_content['sql']; $post_stati = ['publish' => 0, 'pending' => 0, 'draft' => 0, 'auto-draft' => 0, 'future' => 0, 'private' => 0, 'inherit' => 0, 'trash' => 0]; if ( $sql != "") { $table_model = new ADFO_model(); $table_model->prepare($sql); $table_model->remove_limit(); $post_author_field = self::get_post_author_field($post); if ($post_author_field != '') { $user = wp_get_current_user(); $user_roles = $user->roles; $user_role = self::get_user_role($post); if ($user_role == 'contributor') { $table_model->list_add_where( [['op'=>'=', 'column' => $post_author_field, 'value' => $user->ID ]]); } else if ($user_role == 'author') { $table_model->list_add_where( [['op'=>'=', 'column' => $post_author_field, 'value' => $user->ID ]]); } else if ($user_role != 'editor' && !in_array('administrator', $user_roles)) { return []; } } if (isset($post_content['sql_filter']) && is_array($post_content['sql_filter'])) { $table_model->list_add_where($post_content['sql_filter']); } self::add_post_type_settings($table_model, $post); // trovo il campo post_status $post_status = self::get_post_status_field($post); // faccio il distinct del campo post_status $table_model->list_change_select('DISTINCT '.$post_status." as post_status"); $post_status_names = $table_model->get_list(); $post_model_query = $table_model->get_current_query(); if (is_array($post_status_names) && count($post_status_names) > 1) { array_shift($post_status_names); foreach ($post_status_names as $pst) { $table_model_count = new ADFO_model(); $table_model_count->prepare($post_model_query); // conto quanti record ci sono per ogni stato $table_model_count->list_change_select('COUNT(*) as count'); $table_model_count->list_add_where([['op'=>'=', 'column'=>$post_status, 'value'=>$pst->post_status]]); $count = $wpdb->get_var($table_model_count->get_current_query()); $post_stati[$pst->post_status] = $count; } } } return $post_stati; } /** * Aggiunge eventuali USER O POST alla query sql per sostituire le colonne POST e USER * @param ADFO_model $table_model */ static function add_post_user_column(&$table_model, &$post) { global $wpdb; $lookups = false; $new_select = []; foreach ($post->post_content['list_setting'] as $key=>$setting) { if ($setting->view == "POST" ) { // trovo il form per vedere se è un is_multple o no $is_multiple = false; foreach ($post->post_content['form'] as $field) { if ($field['name'] == $setting->name && $field['table'] == $setting->table && isset($field['is_multiple']) && $field['is_multiple'] == 1) { $is_multiple = true; } } if ($is_multiple) continue; $lookups = true; $query = $table_model->get_current_query(); $alias = ADFO_fn::get_table_alias('post', $query); $pri = '`'.esc_sql($alias).'`.`ID`'; $table_model->list_add_from(' LEFT JOIN `'.$wpdb->posts.'` `'.$alias.'` ON '.esc_sql($setting->mysql_name).' = '.$pri); $alias2 = $alias."_".ADFO_fn::get_table_alias('title', $query); $new_select[] = '`'.esc_sql($alias).'`.`post_title` AS `'.esc_sql($alias2).'`'; $post->post_content['list_setting'][$alias2] = clone $setting; $setting->toggle = 'HIDE'; $post->post_content['list_setting'][$alias2]->title = ($setting->title != '') ? $setting->title : $key; $post->post_content['list_setting'][$alias2]->type = NULL; if ($setting->custom_param == 1) { $post->post_content['list_setting'][$alias2]->custom_param = $key; $post->post_content['list_setting'][$alias2]->view = '_POST_LINK'; } else { $post->post_content['list_setting'][$alias2]->view = 'TEXT'; } $post->post_content['list_setting'][$alias2]->mysql_name = '`'.$alias.'`.`post_title`'; $post->post_content['list_setting'][$alias2]->searchable = 'LIKE'; } else if ($setting->view == "USER" ) { // trovo il form per vedere se è un is_multple o no $is_multiple = false; foreach ($post->post_content['form'] as $field) { if ($field['name'] == $setting->name && $field['table'] == $setting->table && isset($field['is_multiple']) && $field['is_multiple'] == 1) { $is_multiple = true; } } if ($is_multiple) continue; $lookups = true; $query = $table_model->get_current_query(); $alias = ADFO_fn::get_table_alias('users', $query); $pri = '`'.esc_sql($alias).'`.`ID`'; $table_model->list_add_from(' LEFT JOIN `'.$wpdb->users.'` `'.$alias.'` ON '.esc_sql($setting->mysql_name).' = '.$pri); $alias2 = $alias."_".ADFO_fn::get_table_alias('name', $query); $new_select[] = '`'.esc_sql($alias).'`.`user_nicename` AS `'.esc_sql($alias2).'`'; $post->post_content['list_setting'][$alias2] = clone $setting; $setting->toggle = 'HIDE'; $post->post_content['list_setting'][$alias2]->title = ($setting->title != '') ? $setting->title : $key; $post->post_content['list_setting'][$alias2]->type = NULL; if ($setting->custom_param == 1) { $post->post_content['list_setting'][$alias2]->custom_param = $key; $post->post_content['list_setting'][$alias2]->view = '_USER_LINK'; } else { $post->post_content['list_setting'][$alias2]->view = 'TEXT'; } $post->post_content['list_setting'][$alias2]->mysql_name = '`'.$alias.'`.`user_nicename`'; $post->post_content['list_setting'][$alias2]->searchable = 'LIKE'; } } // devo sostituire tutti i select mancano i campi non legati a tabelle (e i campi aggiunti con custom_value?!) if ($lookups) { $table_model->list_add_select(implode(', ', $new_select)); } } /** * Setta i parametri per la form di inserimento quando c'è una tabella post. * @param string $table_as * @param string $table_name * @return ADFO_field_param[] */ static function setting_post_form($table_as, $table_name) { $fields = []; $fields[] = (new ADFO_field_param())->set_from_array([ 'name'=>'ID', 'order' => 1, 'table' => $table_as, 'orgtable' => $table_name, 'edit_view' => 'SHOW', 'label' => 'ID', 'form_type'=> 'PRI' ]); $fields[] = (new ADFO_field_param())->set_from_array([ 'name'=>'post_title', 'order' => 2, 'table' => $table_as, 'orgtable' => $table_name, 'edit_view' => 'SHOW', 'label' => 'Title', 'form_type'=> 'VARCHAR', 'required' => 1, ]); $fields[] = (new ADFO_field_param())->set_from_array([ 'name'=>'post_content', 'order' => 3, 'table' => $table_as, 'orgtable' => $table_name, 'edit_view' => 'HIDE', 'label' => $field, 'form_type'=> 'TEXT' ]); $fields[] = (new ADFO_field_param())->set_from_array([ 'name'=>'post_author', 'order' => 4, 'table' => $table_as, 'orgtable' => $table_name, 'edit_view' => 'SHOW', 'label' => 'Author', 'form_type'=> 'RECORD_OWNER' ]); $fields[] = (new ADFO_field_param())->set_from_array([ 'name'=>'post_status', 'order' => 5, 'table' => $table_as, 'orgtable' => $table_name, 'edit_view' => 'SHOW', 'label' => 'Status', 'default_value' => 'publish', 'form_type'=> 'POST_STATUS' ]); $other_fields = [ 'post_type', 'post_status', 'guid','post_excerpt','post_name','post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt','comment_status', 'ping_status', 'post_password', 'post_content_filtered', 'post_parent', 'menu_order','post_mime_type', 'comment_count','to_ping', 'pinged' ]; $count = 6; foreach ($other_fields as $field) { $fields[] = (new ADFO_field_param())->set_from_array([ 'name'=>$field, 'order' => $count, 'table' => $table_as, 'orgtable' => $table_name, 'edit_view' => 'HIDE', 'label' => $field, 'form_type'=> 'TEXT' ]); $count++; } return $fields; } /** * Setting post list structure configure * @param string $table_as * @param string $table_name * @return ADFO_list_setting[] */ static function setting_post_structure($table_as, $table_name) { $other_fields = ['ID','post_title', 'post_content', 'post_author', 'post_excerpt', 'post_type', 'post_status', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_content_filtered', 'post_parent', 'guid', 'menu_order','post_mime_type', 'comment_count', 'post_date_gmt', 'post_date']; $count = 1; $list_setting = []; foreach ($other_fields as $field) { $view = 'TEXT'; switch($field) { case 'post_title': $view = 'PERMALINK'; break; case 'post_author': $view = 'USER'; break; case 'post_content': $view = 'EDITOR_TINYMCE'; break; case 'post_date': case 'post_date_gmt': case 'post_modified': case 'post_modified_gmt': $view = 'DATETIME'; break; } $list_setting[$field] = (new ADFO_list_setting())->set_from_array( ['toggle'=>((in_array($field, ['ID', 'post_title', 'post_author', 'post_status'])) ? 'SHOW': 'HIDE'), 'title' => $field, 'view' => $view, 'order' => $count, 'type' => 'FIELD', 'mysql_name' => $table_name, 'mysql_table' => '`'.$table_as.'`.`'.$field.'`', 'name_request' => $field, 'inherited' => 1 ] ); if ($field == 'post_title') { $list_setting[$field]->custom_param = 'ID'; } $count++; } return $list_setting; } /** * Genera un post type unico */ static function generate_post_type($post_type_origin) { $post_type = substr(strtolower(preg_replace('/[^A-Za-z0-9\_]/', '-', $post_type_origin)), 0, 20); $post_type = str_replace('--', '-', $post_type); if ($post_type_origin != $post_type) { $count_post_type = 1; while (post_type_exists($post_type) && $count_post_type < 100) { $post_type = substr(strtolower(preg_replace('/[^A-Za-z0-9\_]/', '-', $post_type_origin)), 0, 18); $post_type = str_replace('--', '-', $post_type); $post_type .= str_pad($count_post_type, 2, "0", STR_PAD_LEFT); $count_post_type++; } } return $post_type; } /** * conta il numero di post per post_status per un singolo utente */ static function count_post_by_status($post_type, $user_id) { global $wpdb; $sql = "SELECT post_status, count(*) as count FROM `".$wpdb->posts."` WHERE post_type = '".esc_sql($post_type)."' AND post_author = ".absint($user_id)." GROUP BY post_status"; $result = $wpdb->get_results($sql); $count = []; $statuses = get_post_stati( [], 'objects' ); foreach ($statuses as $status) { $count[$status->name] = 0; } foreach ($result as $row) { $count[$row->post_status] = $row->count; } return $count; } /** * Converte gli id delle tabelle da table.id (table_alias.orgname) a table_id (alias del campo della query) * @DEPRECATED??? */ static function convert_id_table($dbp_id, $dbp_ids) { $dbp_post = ADFO_functions_list::get_post_dbp($dbp_id); if ($dbp_post == false) return []; // qui ci devono essere tutte le chiavi primarie! $ids_alias = ADFO::get_primaries_id($dbp_id, false); $result_ids = []; $columns = ADFO::get_ur_list_columns($dbp_id); if (is_array($dbp_ids)) { foreach ($ids_alias as $id_alias) { $field_setting = $dbp_post->post_content["list_setting"][$id_alias]; $query_var = ""; if (array_key_exists($id_alias, $dbp_ids)) { // name_request $query_var = $dbp_ids[$id_alias]; } else if (array_key_exists($field_setting->table.".".$field_setting->orgname, $dbp_ids)) { // nome della colonna $query_var = $dbp_ids[$field_setting->table.".".$field_setting->orgname]; } if (absint($query_var) > 0) { $result_ids[$id_alias] = absint($query_var); } } } else { $result_ids = $dbp_ids; } return $result_ids; } }