syntax_highlighting
if ( empty( $settings ) || empty( $settings['codemirror'] ) ) {
return false;
}
wp_enqueue_script( 'code-editor' );
wp_enqueue_style( 'code-editor' );
wp_enqueue_script( 'csslint' );
wp_enqueue_script( 'htmlhint' );
wp_enqueue_script( 'jshint' );
wp_add_inline_script( 'code-editor', sprintf( 'jQuery.extend( wp.codeEditor.defaultSettings, %s );', wp_json_encode( $settings ) ) );
}
}
/**
* L'ajax per la richiesta dell'elenco dei valori unici per mostrarli nei filtri di ricerca
* $_REQUEST = array(5) {
* ["sql"]=> string(26) "SELECT * FROM `wpx_posts`"["rif"]=> string(21) "wpx_posts_post_author", ["column"]=> string(25) "`wpx_posts`.`post_author`", ["action"]=> string(19) "af_distinct_values", ["table"]=> string(9) "wpx_posts"
* }
* [{c=>il testo del campo distinct, p=>l'id se serve di filtrare per id oppure -1 n il numero di volte che compare},{}] | false if is not a select query
*
*/
public function af_distinct_values() {
global $wpdb;
ADFO_fn::require_init();
if (!isset($_REQUEST['column'])) {
wp_send_json(['error' => 'no_column_selected']);
die();
}
$table = (isset($_REQUEST['table'])) ? sanitize_text_field($_REQUEST['table']) : '';
$model = new ADFO_model( $table ); // è la tabella a cui appartiene il singolo campo!
if (isset($_REQUEST['sql'])) {
$req_sql =html_entity_decode( wp_kses_post( wp_unslash($_REQUEST['sql'])));
$model->prepare($req_sql);
if (!isset($_REQUEST['dbp_id'])) {
$model->removes_column_from_where_sql(sanitize_text_field($_REQUEST['column']));
}
}
if (isset($_REQUEST['filter_distinct'])) {
$result = $model->distinct(sanitize_text_field($_REQUEST['column']), sanitize_text_field($_REQUEST['filter_distinct']));
} else {
$result = $model->distinct(sanitize_text_field($_REQUEST['column']));
}
$error = "";
$count = 0;
if ($model->last_error != "" || !is_countable($result)) {
$error = __('Option not available for this query '.$model->last_error." ".$model->get_current_query(),'admin_form');
$result = [];
} else if ( count($result) >= 1000) {
//$error = __('The column has too many values to show.
You can use the field above to filter the results','admin_form');
$count = count ($result);
if (count($result) >= 5000) {
$count = "5000+";
}
$result = [];
} else {
$count = count ($result);
}
wp_send_json(['error' => $error, 'result' => $result, 'rif' => sanitize_text_field($_REQUEST['rif']), 'count'=>$count, 'filter_distinct'=>sanitize_text_field(@$_REQUEST['filter_distinct'] )]);
die();
}
/**
* L'ajax per la richiesta dell'elenco dei valori unici per mostrarli nei filtri di ricerca
* $_REQUEST = array(5) {
* ["sql"]=> string(26) "SELECT * FROM `wpx_posts`"["rif"]=> string(21) "wpx_posts_post_author", ["column"]=> string(25) "`wpx_posts`.`post_author`", ["action"]=> string(19) "af_distinct_values", ["table"]=> string(9) "wpx_posts"
* }
* [{c=>il testo del campo distinct, p=>l'id se serve di filtrare per id oppure -1 n il numero di volte che compare},{}] | false if is not a select query
*/
public function af_autocomplete_values() {
global $wpdb;
ADFO_fn::require_init();
if (!isset($_REQUEST['params'])) {
wp_send_json(['error' => 'no_params_selected']);
die();
}
$params = ADFO_fn::sanitize_text_recursive($_REQUEST['params']);
$result = [];
$error = "";
// TODO REQUEST TABLE E COLUMN devono trasformarsi in un generico attributes... perché esistono più tipi di distinct values (e in alcuni casi potrebbero non essere distinct (?!))
if (isset($params['type']) && $params['type'] == "post") {
$count = 2000;
$array_params = array(
'post_limits' => 100,
'orderby' => 'post_title',
'order' => 'ASC',
'post_type' => $params['post_types'],
'post_status' => 'publish'
);
if (isset($params['cats']) && is_countable(($params['cats']))) {
$array_params['category__in'] = $params['cats'];
}
if (isset($_REQUEST['filter_distinct'])) {
$array_params['search'] = sanitize_text_field($_REQUEST['filter_distinct'])."*";
}
$posts = query_posts($array_params);
foreach($posts as $rl) {
$result[] = ['c' => wp_trim_words(strip_tags($rl->post_title), 10), 'p'=>$rl->ID];
}
if (count($result) < 100) {
$count = count($result);
}
} else if (isset($params['type']) && $params['type'] == "user") {
$count = 2000;
$array_params = array('number'=>100);
if (isset($params['roles']) && is_countable(($params['roles']))) {
$array_params['role__in'] = $params['roles'];
}
if (isset($_REQUEST['filter_distinct'])) {
$array_params['search'] = sanitize_text_field($_REQUEST['filter_distinct'])."*";
}
$users = get_users( $array_params );
foreach($users as $rl) {
$result[] = ['c' => wp_trim_words(strip_tags($rl->user_login), 10), 'p'=>$rl->ID];
}
if (count($result) < 100) {
$count = count($result);
}
} else if (isset($params['type']) && $params['type'] == "lookup") {
/*
* NON VA BENE! devo passare id della lista e field del lookup
params[lookup_id]: dbt_id
params[lookup_sel_val]: field_key
*/
$count = -1;
$post = ADFO_functions_list::get_post_dbp(absint($params['lookup_id']));
$lookup_table = $lookup_sel_val = $lookup_sel_txt = $lookup_where = '';
foreach ($post->post_content['form'] as $form) {
if ($form['name'] == $params['lookup_sel_val']) {
$lookup_table = $form['lookup_id'];
$lookup_sel_val = $form['lookup_sel_val'];
$lookup_sel_txt = $form['lookup_sel_txt'];
$lookup_where = trim($form['lookup_where']);
}
}
if ($lookup_table != "") {
$table_model = new ADFO_model($lookup_table); // è la tabella a cui appartiene il singolo campo!
//TODO questo lo prendo da dbp_id se è presente altrimenti dalla query
if ($lookup_where != "") {
$sql = $table_model->get_current_query()." WHERE ".$lookup_where;
$table_model->prepare($sql);
}
$table_model->list_change_select('`'.esc_sql($lookup_sel_val).'` AS val, `'.esc_sql($lookup_sel_txt).'` AS txt');
if (isset($_REQUEST['filter_distinct']) && $_REQUEST['filter_distinct'] != "") {
$table_model->list_add_where([['op'=>'LIKE%','column'=>$lookup_sel_txt, 'value'=>sanitize_text_field($_REQUEST['filter_distinct'])],
['op'=>'NOT NULL','column'=>$lookup_sel_txt, 'value'=>'']]);
} else {
$table_model->list_add_where([['op'=>'NOT NULL','column'=>$lookup_sel_txt, 'value'=>'']]);
}
$table_model->list_add_limit(0, 100);
$table_model->list_add_order('`'.$lookup_sel_txt.'`', 'ASC');
//$error = "sql: | ".$table_model->get_current_query();
$items = $table_model->get_list();
$count = $table_model->get_count();
if ($table_model->last_error != "" || !is_countable($result)) {
$error = __('Query Error '.$table_model->last_error, 'admin_form');
} else {
array_shift($items);
foreach($items as $rl) {
$result[] = ['c' => wp_trim_words(strip_tags($rl->txt), 10), 'p'=>$rl->val];
}
$count = $table_model->get_count();
}
}
} else {
$model = new ADFO_model($params['table']); // è la tabella a cui appartiene il singolo campo!
//TODO questo lo prendo da dbp_id se è presente altrimenti dalla query
if (isset($_REQUEST['sql'])) {
$model->prepare(html_entity_decode(wp_kses_post( wp_unslash($_REQUEST['sql']))));
}
$result = $model->distinct($params['column'], sanitize_text_field($_REQUEST['filter_distinct']));
$error = "";
$count = 0;
if ($model->last_error != "" || !is_countable($result)) {
$error = __('Option not available for this query','admin_form');
$result = [];
} else if ( count($result) >= 1000) {
//$error = __('The column has too many values to show.
You can use the field above to filter the results','admin_form');
$count = count ($result);
if (count($result) >= 5000) {
$count = "5000+";
}
$result = [];
} else {
$count = count ($result);
}
}
wp_send_json([
'error' => $error,
'result' => $result,
'rif' => sanitize_text_field($_REQUEST['rif']),
'count'=>$count,
'filter_distinct' => sanitize_text_field(@$_REQUEST['filter_distinct']) ]);
die();
}
/**
* Aggiungo le voci di menu delle liste
* postmeta _dbp_admin_show
* ```json
* {"page_title":"dbp_174","menu_title":"connection","capability":"manage_options","slug":"dbp_174"}
* ```
*/
public function init_add_menu_page() {
global $wpdb;
$pages = $wpdb->get_results("SELECT * FROM ".$wpdb->postmeta ." WHERE meta_key = '_dbp_admin_show'");
if (is_countable($pages)) {
require_once(ADFO_DIR . "admin/class-af-admin-menu.php");
$db_admin = new ADFO_admin_list_menu();
foreach ($pages as $page) {
$page_data = maybe_unserialize(@$page->meta_value);
if (is_countable($page_data) && isset($page_data['show']) && $page_data['show'] == 1 && isset($page_data['status']) && $page_data['status'] != 'trash') {
add_menu_page($page_data['page_title'], $page_data['menu_title'], $page_data['capability'], $page_data['slug'], [$db_admin, 'controller'], $page_data['menu_icon'], $page_data['menu_position']);
}
}
}
}
/**
* Aggiungo gli script frontend
*/
public function frontend_enqueue_scripts() {
$file = plugin_dir_path( __FILE__ );
$dbp_css_ver = date("ymdGi", filemtime( plugin_dir_path($file) . 'frontend/admin-form.css' ));
$dbp_js_ver = date("ymdGi", filemtime( plugin_dir_path($file) . 'frontend/admin-form.js' ));
wp_register_style( 'dbp_frontend_css', plugins_url( 'frontend/admin-form.css', $file), false, $dbp_css_ver );
wp_enqueue_style( 'dbp_frontend_css' );
wp_register_script( 'dbp_frontend_js', plugins_url( 'frontend/admin-form.js', $file), false, $dbp_js_ver, true);
// wp_add_inline_script( 'mytheme-typekit', 'try{Typekit.load({ async: true });}catch(e){}' );
wp_add_inline_script( 'dbp_frontend_js', 'dbp_post = "'.esc_url( admin_url('admin-ajax.php')).'";', 'before' );
wp_enqueue_script( 'dbp_frontend_js' );
}
/**
* Restituisce una lista chiamata in ajax (per il frontend - da verificare che sia nel singolo giorno)
*/
public function get_list() {
ADFO_fn::require_init();
$result['div'] = sanitize_text_field($_REQUEST['dbp_div_id']);
if (isset($_REQUEST['dbp_prefix'])) {
$prefix = sanitize_text_field($_REQUEST['dbp_prefix']);
} else {
$prefix = "";
}
if (isset($_REQUEST['dbp_extra_attr'])) {
$dbp_extra_attr = ADFO_fn::sanitize_text_recursive($_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'])) {
// pinacode::set_var('params', $extra_attr['params']);
//}
if (isset($extra_attr['data'])) {
pinacode::set_var('data', $extra_attr['data']);
}
$result['html'] = ADFO::get_list(absint($_REQUEST['dbp_list_id']), true, $extra_attr['params'], $prefix);
} else {
$result['html'] = 'OPS an error occurred';
}
} else {
$result['html'] = ADFO::get_list(absint($_REQUEST['dbp_list_id']), true, [], $prefix);
}
wp_send_json($result);
die();
}
/**
* Carico i dettagli di una lista in detail
*
* @return void
*/
public function get_detail() {
ADFO_fn::require_init();
$dbp_ids = sanitize_text_field($_REQUEST['dbp_ids']);
$ids = ADFO_fn::ids_url_decode($dbp_ids);
$dbp_id = absint($_REQUEST['dbp_id']);
if ($dbp_id == 0 && !(is_array($ids) || is_numeric($ids))) return;
$result = ADFO::get_detail($dbp_id, $ids);
if ($result !== false ) {
$dbp_post = ADFO_functions_list::get_post_dbp($dbp_id);
if (isset($dbp_post->post_content['frontend_view']['detail_type']) && $dbp_post->post_content['frontend_view']['detail_type'] == "PHP") {
do_action('dbp_detail_'.$dbp_id, $result);
} else if (isset($dbp_post->post_content['frontend_view']['detail_type']) && $dbp_post->post_content['frontend_view']['detail_type'] == "CUSTOM") {
$detail_template = $dbp_post->post_content['frontend_view']['detail_template'];
PinaCode::set_var('data', $result) ;
$ris = PinaCode::execute_shortcode($detail_template);
if (is_array($ris) || is_object($ris)) {
echo wp_unslash(json_encode($ris));
} else {
echo $ris;
}
} else {
// stampo un detail di default
?>
PRI NAME".$pri_name."
"; // preparo i campi da salvare // Setto le variabili per i campi calcolati // DA TESTARE foreach ($fields_names as $kn=>$fn) { if ($kn != "_dbp_alias_table_") { // ? if (is_countable($fn[$key])) { $fn[$key] = maybe_serialize($fn[$key]); } $fn[$key] = wp_kses_post(wp_unslash( $fn[$key] )); //$sql[$kn] = $fn[$key]; PinaCode::set_var(ADFO_fn::clean_string($alias_table).".".$kn, $fn[$key]); PinaCode::set_var("data.".$kn, $fn[$key]); } } foreach ($fields_names as $kn=>$fn) { if ($kn != "_dbp_alias_table_") { $sql[$kn] = wp_kses_post(wp_unslash( $fn[$key] )); } } // se primary key è un valore if ($primary_value != "") { $exists = $wpdb->get_var($wpdb->prepare('SELECT count(*) as tot FROM `'.ADFO_fn::sanitize_key($table).'` WHERE `'.ADFO_fn::sanitize_key($primary_key).'` = %s', absint($primary_value))); if ($exists == 0) { $sql[$primary_key] = $primary_value; } } else { $sql[$primary_key] = $primary_value; } $setting = false; $option = false; if (is_a($form_dbp_id, 'admin_form\ADFO_class_form')) { //TODO non è più sensata una sola funzione? $setting = $form_dbp_id->find_setting_from_table_field($alias_table); $option = $form_dbp_id->find_option_from_table_field($alias_table); if ($option->module_type != 'EDIT' || $option->table_status == "CLOSE") continue; } if ($exists == 1) { if (count($sql) > 0) { $query_to_execute[] = ['action'=>'update', 'table'=>$table, 'sql_to_save'=>$sql, 'id'=> [$primary_key=>$primary_value], 'table_alias'=>$alias_table, 'pri_val'=>$primary_value, 'pri_name'=>$primary_key, 'setting' => $setting]; } } else if ($exists == 0) { $json_result['reload'] = 1; if (isset($sql[$primary_key])) { unset($sql[$primary_key]); } if (count($sql) > 0 && !(isset($sql['_dbp_leave_empty_']) && $sql['_dbp_leave_empty_'] == 1 )) { $query_to_execute[] = ['action'=>'insert', 'table'=>$table, 'sql_to_save'=>$sql, 'table_alias'=>$alias_table, 'pri_val'=>$primary_value, 'pri_name'=>$primary_key, 'setting' => $setting]; } } else { // ha trovaro risultati doppi? } } //die($pri); } } $ris = ADFO_functions_list::execute_query_savedata($query_to_execute, $dbp_id, 'admin-form'); foreach ($ris as $r) { if (!($r['result'] == true || ($r['result'] == false && $r['error'] == "" && $r['action']=="update"))) { $json_result['error'] = ($r['error'] != "") ? $r['error'] : 'the data could not be saved'; ADFO_fn::set_cookie('error', $json_result['error']); if (is_countable($queries_executed) && count($queries_executed) > 0) { $json_result['msg'] =sprintf( __('%s record update','admin_form'), count($queries_executed)); ADFO_fn::set_cookie('msg', $json_result['msg']); } wp_send_json($json_result); die(); } else { $queries_executed[] = $r['query']; } } if (is_countable($queries_executed) && count($queries_executed) > 0) { $json_result['msg'] = __('Saved','admin_form'); ADFO_fn::set_cookie('msg', $json_result['msg']); } // preparo i dati da inviare per aggiornare la tabella nel frontend! $dbp_global_list_id = ADFO_fn::get_request('dbp_global_list_id', 0, 'absint'); $table_model = $this->get_table_model_for_sidebar($dbp_global_list_id); if ($table_model != false) { // preparo i dati da inviare per aggiornare la tabella nel frontend! $dbp_global_list_id = ADFO_fn::get_request('dbp_global_list_id', 0, 'absint'); if ($dbp_global_list_id > 0) { $post = ADFO_functions_list::get_post_dbp($dbp_global_list_id); ADFO_functions_list::add_lookups_column($table_model, $post); } $table_model->get_list(); if ($dbp_global_list_id > 0) { $table_model->update_items_with_setting($post); } ADFO_fn::remove_hide_columns($table_model); $table_items = $table_model->items; if (count($table_model->items) == 2) { $json_result['table_item_row'] = array_pop($table_items); } else { $json_result['reload'] = 1; } } //$json_result['error'] = 'OPS ERRORE!!!'; wp_send_json($json_result); die(); } /** * Imposta i cookie in una variabile statica e li rimuove dai cookie */ function init_get_msg_cookie() { ADFO_fn::init_get_msg_cookie(); } /** * Raggruppo questo pezzettino di codice solo perché usato di continuo per preparare la query sull'edit, view, ecc.. */ private function get_table_model_for_sidebar($dbp_id = 0) { if ($dbp_id > 0) { $post = ADFO_functions_list::get_post_dbp($dbp_id); $table_model = new ADFO_model(); $table_model->prepare($post->post_content['sql']); } if (isset($_REQUEST['ids']) && is_countable($_REQUEST['ids'])) { $filter = []; $ids = ADFO_fn::sanitize_absint_recursive($_REQUEST['ids']); foreach ($ids as $column => $id) { $column = str_replace("`", "", $column ); $column = "`".str_replace(".", "`.`", $column )."`"; $filter[] = ['op' => "=", 'column' => $column, 'value' => $id]; } $table_model->list_add_where($filter); } return $table_model; } /** * Mette tutte le tabelle di wordpress in stato pubblicato */ function publish_wp_tables($status, $table) { global $wpdb; if (in_array($table, [$wpdb->posts, $wpdb->users, $wpdb->prefix.'usermeta', $wpdb->prefix.'terms' , $wpdb->prefix.'termmeta', $wpdb->prefix.'term_taxonomy', $wpdb->prefix.'term_relationships', $wpdb->postmeta, $wpdb->prefix.'options', $wpdb->prefix.'links', $wpdb->prefix.'comments', $wpdb->prefix.'commentmeta'])) { $status = 'PUBLISH'; } return $status; } /** * Quando cliccano il popup per votare il plugin registro la scelta (già votato o non mi piace) */ function record_preference_vote() { $vote = sanitize_text_field($_REQUEST['msg']); $info = get_option('_af_activete_info'); $info['voted'] = $vote; update_option('_af_activete_info', $info, false); wp_send_json(['done']); die(); } /** * Calcola quali record sta per eliminare a seconda della query e delle primary ID */ public function af_delete_confirm() { ADFO_fn::require_init(); $json_send = []; //$json_send = ['error' => '', 'items' => '', 'checkboxes']; if (!isset($_REQUEST['ids']) || !is_countable($_REQUEST['ids'])) { $json_send['error'] = __('I have not found any results. Verify that the primary key of each selected table is always displayed in the MySQL SELECT statement.', 'admin_form'); wp_send_json($json_send); die(); } if (isset($_REQUEST['dbp_id']) && $_REQUEST['dbp_id'] > 0) { $ids = ADFO_fn::sanitize_intjson_recursive($_REQUEST['ids']); $json_send = ADFO_fn::prepare_delete_rows($ids,'', absint($_REQUEST['dbp_id'])); } else if ($_REQUEST['sql'] != "") { $ids = ADFO_fn::sanitize_absint_recursive($_REQUEST['ids']); //TODO security nessun sql deve passare su request! $json_send = ADFO_fn::prepare_delete_rows($ids, wp_kses_post( wp_unslash($_REQUEST['sql'])) ); } else { $json_send['error'] = __('Something wrong', 'admin_form'); wp_send_json($json_send); die(); } unset($json_send['sql']); wp_send_json($json_send); die(); } } $ADFO_admin_loader = new ADFO_admin_loader();