<?php
/*
Interface Creator
www.bioinformatics.org/phplabware
6 September 2014 release
By Santosh Patnaik, MD, PhD
GPL license
Based on DaDaBik version 3.2 by Eugenio Tacchini - http://www.dadabik.org
*/
// for function_exists-like check, e.g., in check_login.php
$business_logic_included = 1;
function current_user_is_owner($where_field, $where_value, $table_name, $fields_labels_ar) {
global $current_user, $conn, $db_name;
// get the name of the field that has ID_user type
$ID_user_field_name = get_ID_user_field_name($fields_labels_ar);
if($ID_user_field_name === false) {
return true;
}
else {
// check if the owner of the record is current_user
$sql = "SELECT `" . add_slashes($ID_user_field_name, 1) . "` FROM `" . add_slashes($table_name, 1) . "` WHERE `" . add_slashes($where_field, 1) . "` = " . add_slashes($where_value) . " AND `" . add_slashes($ID_user_field_name, 1) . "` = " . add_slashes($current_user);
$res = execute_db($sql, $conn, 'business_logic.php');
$num_rows = database_num_rows($res);
if($num_rows === 1) {
return true;
}
else {
return false;
}
}
// end else
}
// end function current_user_is_owner()
function get_ID_user_field_name($fields_labels_ar) {
$ID_user_field_name = false;
$fields_labels_ar_count = count($fields_labels_ar);
$i = 0;
while($i < $fields_labels_ar_count && $ID_user_field_name === false) {
if($fields_labels_ar[$i]['type_field'] === 'ID_user') {
$ID_user_field_name = $fields_labels_ar[$i]['name_field'];
}
// end if
$i++;
}
// end while
return $ID_user_field_name;
}
// end function get_ID_user_field_name()
function get_user_infos_ar_from_username_password($username_user, $password_user, $md5_or_not) {
global $conn, $users_table_name, $users_table_username_field, $users_table_password_field, $users_table_user_type_field;
if($md5_or_not == 'md5') {
$password_user = md5($password_user);
}
// md5 hash before comparison; not needed if from cookie
$sql = "SELECT `" . $users_table_username_field . "`, `" . $users_table_password_field . "`, `" . $users_table_user_type_field . "` FROM `" . add_slashes($users_table_name, 1) . "` WHERE `" . add_slashes($users_table_username_field, 1) . "` = " . add_slashes($username_user) . " AND `" . $users_table_password_field . "` = " . add_slashes($password_user);
$res = execute_db($sql, $conn, 'business_logic.php');
if(database_num_rows($res) === 1) {
$row = database_fetch_array($res);
$user_infos_ar['username_user'] = $row[$users_table_username_field];
$user_infos_ar['password_user'] = $row[$users_table_password_field];
$user_infos_ar['user_type_user'] = $row[$users_table_user_type_field];
return $user_infos_ar;
}
// end if
else {
return false;
}
}
// end function get_user_infos_ar_from_username_password()
function build_fields_names_array($table_name) {
global $conn, $db_name;
// put the name of the table's fields in an array
$fields = database_list_fields($db_name, $table_name, $conn);
$r = array();
foreach($fields as $v) {
$r[] = $v[0];
}
return $r;
}
// end build_fields_names_array function
function build_tables_names_array($exclude_not_allowed = 1, $exclude_not_installed = 1, $include_users_table = 0) {
global $conn, $db_name, $prefix_internal_table, $table_list_name, $users_table_name, $current_user_is_administrator;
$z = 0;
$tables_names_ar = array();
if($exclude_not_installed == 1) {
// get the list from $table_list_name tab
$sql = "SELECT `name_table` FROM `" . add_slashes($table_list_name, 1) . '`';
if($exclude_not_allowed == 1) {
// excluding not allowed if necessary
$sql .= " WHERE `allowed_table` = 1";
}
// end if
$res = execute_db($sql, $conn, 'business_logic.php');
while($row = database_fetch_array($res)) {
if($current_user_is_administrator === 1 || $row[0] !== $users_table_name || $include_users_table === 1) {
$tables_names_ar[$z] = $row[0];
$z++;
}
// end if
}
}
// end if
else {
// get the list directly from db
$tables_res = database_list_tables($db_name, $conn);
$table_number = count($tables_res);
for($i = 0; $i < $table_number; $i++) {
$table_name_temp = $tables_res[$i];
// if the table is not internal
if(substr($table_name_temp, 0, strlen($prefix_internal_table)) != $prefix_internal_table && $table_name_temp != $table_list_name) {
$tables_names_ar[$z] = $tables_res[$i];
$z++;
}
// end if
}
// end for
}
// end else
return $tables_names_ar;
}
// end build_tables_names_array function
function table_exists($table_name) {
global $conn;
if(database_query("DESCRIBE `" . add_slashes($table_name, 1) . '`', $conn) === false) {
return false;
}
else {
return true;
}
}
// end function table_exists
// goal: build an array ($fields_labels_ar) containing the fields labels and other information about fields (e.g. the type, display/don't display) of a specified table to use in the form
// input: name of the internal table, $order, 0|1 if shouldn't/should be order by order_form
// output: fields_labels_ar, a 2 dimensions associative array: $fields_labels_ar[field_number]["internal table field (e.g. present_insert_form_field)"]
// global $error_messages_ar, the array containg the error messages
function build_fields_labels_array($table_internal_name, $order) {
global $conn, $error_messages_ar;
$table_alias_suffixes_ar = array();
// put the labels and other information of the table's fields in an array
$sql = "SELECT `name_field`, `present_insert_form_field`, `present_ext_update_form_field`, `present_search_form_field`, `required_field`, `present_results_search_field`, `present_details_form_field`,
`check_duplicated_insert_field`, `type_field`, `other_choices_field`, `content_field`, `label_field`, `select_options_field`,
`separator_field`, `primary_key_field_field`, `primary_key_table_field`, `primary_key_db_field`, `linked_fields_field`, `linked_fields_order_by_field`, `linked_fields_order_type_field`,
`linked_fields_extra_mysql`, `select_type_field`, `prefix_field`, `default_value_field`, `width_field`, `height_field`, `maxlength_field`,
`hint_insert_field`, `order_form_field` FROM `" . add_slashes($table_internal_name, 1) . '`';
if($order == "1") {
$sql .= " ORDER BY `order_form_field`";
}
// end if
$res_field = execute_db($sql, $conn, 'business_logic.php');
$i = 0;
if(database_num_rows($res_field) > 0) {
// at least one record
while($field_row = database_fetch_array($res_field)) {
$fields_labels_ar[$i]["name_field"] = $field_row["name_field"];
// the name of the field
$fields_labels_ar[$i]["present_insert_form_field"] = $field_row["present_insert_form_field"];
// 1 if the user want to display it in the insert form
$fields_labels_ar[$i]["present_ext_update_form_field"] = $field_row["present_ext_update_form_field"];
// 1 if the user want to display it in the external update form
$fields_labels_ar[$i]["present_search_form_field"] = $field_row["present_search_form_field"];
// 1 if the user want to display it in the search form
$fields_labels_ar[$i]["required_field"] = $field_row["required_field"];
// 1 if the field is required in the insert (the field must be in the insert form, otherwise this flag hasn't any effect
$fields_labels_ar[$i]["present_results_search_field"] = $field_row["present_results_search_field"];
// 1 if the user want to display it in the basic results page
$fields_labels_ar[$i]["present_details_form_field"] = $field_row["present_details_form_field"];
// 1 if the user want to display it in the basic results page
$fields_labels_ar[$i]["check_duplicated_insert_field"] = $field_row["check_duplicated_insert_field"];
// 1 if the field needs to be checked for duplicated insert
$fields_labels_ar[$i]["label_field"] = $field_row["label_field"];
// the label of the field
$fields_labels_ar[$i]["type_field"] = $field_row["type_field"];
// the type of the field
$fields_labels_ar[$i]["other_choices_field"] = $field_row["other_choices_field"];
// 0/1 the possibility to add another choice with select single menu
$fields_labels_ar[$i]["content_field"] = $field_row["content_field"];
// the control type of the field (eg: numeric, alphabetic, alphanumeric)
$fields_labels_ar[$i]["select_options_field"] = $field_row["select_options_field"];
// the options, separated by separator, possible in a select field
$fields_labels_ar[$i]["separator_field"] = $field_row["separator_field"];
// the separator of different possible values for a select field
$fields_labels_ar[$i]["primary_key_field_field"] = $field_row["primary_key_field_field"];
// the primary key field_name if this field is a foreign key
$fields_labels_ar[$i]["primary_key_table_field"] = $field_row["primary_key_table_field"];
// the primary key table_name if this field is a foreign key
$fields_labels_ar[$i]["primary_key_db_field"] = $field_row["primary_key_db_field"];
// the primary key database if this field is a foreign key
$fields_labels_ar[$i]["linked_fields_field"] = $field_row["linked_fields_field"];
// the fields linked to through the pk
$fields_labels_ar[$i]["linked_fields_order_by_field"] = $field_row["linked_fields_order_by_field"];
// the fields by which order when retreiving the linked fields
$fields_labels_ar[$i]["linked_fields_order_type_field"] = $field_row["linked_fields_order_type_field"];
// the order type (ASC|DESC) to use in the order clause when retreiving the linked fields
$fields_labels_ar[$i]["linked_fields_extra_mysql"] = $field_row["linked_fields_extra_mysql"];
// extra MySQl command to use when retreiving the linked fields
$fields_labels_ar[$i]["select_type_field"] = $field_row["select_type_field"];
// the type of select, exact match or like
$fields_labels_ar[$i]["prefix_field"] = $field_row["prefix_field"];
// the prefix of the field (e.g. http:// - only for text, textarea and rich_editor)
$fields_labels_ar[$i]["default_value_field"] = $field_row["default_value_field"];
// the default value of the field (only for text, textarea and rich_editor)
$fields_labels_ar[$i]["width_field"] = $field_row["width_field"];
// the width size of the field in case of text, textarea or rich_editor
$fields_labels_ar[$i]["height_field"] = $field_row["height_field"];
// the height size of the field in case of textarea or rich_editor
$fields_labels_ar[$i]["maxlength_field"] = $field_row["maxlength_field"];
// the maxlength of the field in case of text
$fields_labels_ar[$i]["hint_insert_field"] = $field_row["hint_insert_field"];
// the hint to display after the field in the insert form (e.g. use only number here!!)
$fields_labels_ar[$i]["order_form_field"] = $field_row["order_form_field"];
// the position of the field in the form
if($field_row["primary_key_field_field"] !== '') {
$linked_fields_ar = explode($field_row["separator_field"], $field_row["linked_fields_field"]);
if(array_key_exists($field_row["primary_key_table_field"], $table_alias_suffixes_ar) === false) {
$table_alias_suffixes_ar[$field_row["primary_key_table_field"]] = 1;
$fields_labels_ar[$i]["alias_suffix_field"] = 1;
}
// end if
else {
$table_alias_suffixes_ar[$field_row["primary_key_table_field"]]++;
$fields_labels_ar[$i]["alias_suffix_field"] = $table_alias_suffixes_ar[$field_row["primary_key_table_field"]];
}
// end else
}
// end if
$i++;
}
// end while
}
// end if
else {
// no records
echo $error_messages_ar["int_db_empty"];
}
// end else
return $fields_labels_ar;
}
// end build_fields_labels_array function
// goal: build a tabled form by using the info specified in the array $fields_labels_ar
// input: $table_name, array containing labels and other info about fields, $action (the action of the form), $form_type, $res_details, $where_field, $where_value (the last three useful just for update forms)
// global: $submit_buttons_ar, the array containing the values of the submit buttons, $normal_messages_ar, the array containig the normal messages, $select_operator_feature, wheter activate or not displaying "and/or" in the search form, $default_operator, the default operator if $select_operator_feature is not activated, $db_name, $size_multiple_select, the size (number of row) of the select_multiple fields, $table_name
// output: $form, the html tabled form
function build_form($table_name, $action, $fields_labels_ar, $form_type, $res_details, $where_field, $where_value) {
global $conn, $submit_buttons_ar, $normal_messages_ar, $select_operator_feature, $default_operator, $db_name, $size_multiple_select, $upload_relative_url, $show_top_buttons, $enable_authentication, $enable_browse_authorization, $current_user;
switch($form_type) {
case 'insert':
$function = 'insert';
break;
case 'update':
$function = 'update';
break;
case 'copy':
$function = 'insert';
break;
case 'ext_update':
$function = 'ext_update';
break;
case 'search':
$function = 'search';
break;
}
// end switch
$form = "";
$form .= "<form id=\"contacts_form\" method=\"post\" action=\"" . $action . "?table_name=" . rawurlencode($table_name) . "&page=0&function=" . $function;
if($form_type == "update" or $form_type == "ext_update") {
$form .= "&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value);
}
if($form_type == "search") {
$form .= "&execute_search=1";
}
$form .= "\" enctype=\"multipart/form-data\"><table>";
switch($form_type) {
case "insert":
$number_cols = 4;
$field_to_ceck = "present_insert_form_field";
break;
case "update":
case "copy":
$number_cols = 4;
$field_to_ceck = "present_insert_form_field";
$details_row = database_fetch_array($res_details);
// get the values of the details
if($show_top_buttons == 1) {
$form .= "<tr class=\"tr_button_form\"><td colspan=\"" . $number_cols . "\" class=\"td_button_form\"><input class=\"button_form\" type=\"submit\" value=\"" . $submit_buttons_ar[$form_type] . "\" /></td></tr>";
}
break;
case "ext_update":
$number_cols = 4;
$field_to_ceck = "present_ext_update_form_field";
$details_row = database_fetch_array($res_details);
// get the values of the details
if($show_top_buttons == 1) {
$form .= "<tr class=\"tr_button_form\"><td colspan=\"" . $number_cols . "\" class=\"td_button_form\"><input class=\"button_form\" type=\"submit\" value=\"" . $submit_buttons_ar[$form_type] . "\" /></td></tr>";
}
break;
case "search":
$number_cols = 3;
$field_to_ceck = "present_search_form_field";
if($select_operator_feature == "1") {
$form .= "<tr class=\"tr_operator_form\"><td colspan=\"" . $number_cols . "\" class=\"td_button_form\"><select single=\"single\" name=\"operator\" id=\"operator\"><option value=\"and\">" . $normal_messages_ar["all_conditions_required"] . "</option><option value=\"or\">" . $normal_messages_ar["any_conditions_required"] . "</option></select></td></tr>";
}
// end if
else {
$form .= "<input type=\"hidden\" id=\"operator\" name=\"operator\" value=\"" . htmlspecialchars($default_operator) . "\" />";
}
// end else
if($show_top_buttons == 1) {
$form .= "<tr class=\"tr_button_form\"><td colspan=\"" . $number_cols . "\"><input class=\"button_form\" type=\"submit\" value=\"" . $submit_buttons_ar[$form_type] . "\" /></td></tr>";
}
break;
}
// end switch
for($i = 0; $i < count($fields_labels_ar); $i++) {
if($fields_labels_ar[$i][$field_to_ceck] == "1") {
// the user want to display the field in the form
// build the first coloumn (label)
//////////////////////////////////
// I put a table inside the cell to get the same margin of the second coloumn
$form .= "<tr><td align=\"right\" valign=\"top\"><table summary=\"none\"><tr><td class=\"td_label_form\" style=\"white-space:nowrap;\">";
if($fields_labels_ar[$i]["required_field"] == "1" and $form_type != "search") {
$form .= "<span class=\"required_field_labels\">";
}
$form .= $fields_labels_ar[$i]["label_field"] . " ";
if($fields_labels_ar[$i]["required_field"] == "1") {
$form .= "</span>";
}
$form .= "</td></tr></table></td><td>";
//////////////////////////////////
// end build the first coloumn (label)
// build the second coloumn (input field)
/////////////////////////////////////////
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$primary_key_field_field = $fields_labels_ar[$i]["primary_key_field_field"];
if($primary_key_field_field != "") {
$primary_key_field_field = $fields_labels_ar[$i]["primary_key_field_field"];
$primary_key_table_field = $fields_labels_ar[$i]["primary_key_table_field"];
$primary_key_db_field = $fields_labels_ar[$i]["primary_key_db_field"];
$linked_fields_field = $fields_labels_ar[$i]["linked_fields_field"];
$linked_fields_ar = explode($fields_labels_ar[$i]["separator_field"], $linked_fields_field);
$linked_fields_order_by_field = $fields_labels_ar[$i]["linked_fields_order_by_field"];
if($linked_fields_order_by_field !== '') {
$linked_fields_order_by_ar = explode($fields_labels_ar[$i]["separator_field"], $linked_fields_order_by_field);
}
else {
unset($linked_fields_order_by_ar);
}
$linked_fields_order_type_field = $fields_labels_ar[$i]["linked_fields_order_type_field"];
$linked_fields_extra_mysql = $fields_labels_ar[$i]["linked_fields_extra_mysql"];
$sql = "SELECT DISTINCT ";
$count_temp = count($linked_fields_ar);
for($j = 0; $j < $count_temp; $j++) {
$sql .= '`' . add_slashes($linked_fields_ar[$j], 1) . "`, ";
}
$sql = substr($sql, 0, - 2);
$sql .= " FROM `" . add_slashes($primary_key_table_field, 1) . '`';
// extra mysql clauses
if($linked_fields_extra_mysql != "") {
$sql .= $linked_fields_extra_mysql;
}
if(isset($linked_fields_order_by_ar)) {
$sql .= " ORDER BY ";
$count_temp = count($linked_fields_order_by_ar);
for($j = 0; $j < $count_temp; $j++) {
$sql .= '`' . add_slashes($linked_fields_order_by_ar[$j], 1) . '`, ';
}
$sql = substr($sql, 0, - 2);
// delete the last "`,"
$sql .= " " . $linked_fields_order_type_field;
}
// end if
// select the primary key database
if($fields_labels_ar[$i]["primary_key_db_field"] != "") {
choose_db($fields_labels_ar[$i]["primary_key_db_field"], $conn);
}
// end if
$res_primary_key = execute_db($sql, $conn, 'business_logic.php');
// re-select the main database
choose_db($db_name, $conn);
}
if($form_type == "search") {
$select_type_select = build_select_type_select($field_name_temp . "_select_type", $fields_labels_ar[$i]["select_type_field"], 0);
// build the select type select form (is_equal....)
$select_type_date_select = build_select_type_select($field_name_temp . "_select_type", $fields_labels_ar[$i]["select_type_field"], 1);
// build the select type select form (is_equal....) for date fields, with the first option blank
}
else {
$select_type_select = "";
$select_type_date_select = "";
}
// end else
$form .= "<table summary=\"none\" border=\"0\"><tr>";
switch($fields_labels_ar[$i]["type_field"]) {
//---------------------------
case "text":
case "ID_user":
case "unique_ID":
$form .= "<td class=\"td_input_form\">" . $select_type_select . "<input type=\"text\" name=\"" . htmlspecialchars($field_name_temp) . "\"id=\"" . htmlspecialchars($field_name_temp) . "\"";
if($fields_labels_ar[$i]["width_field"] != "") {
$form .= " size=\"" . $fields_labels_ar[$i]["width_field"] . "\"";
}
else {
$form .= " size=\"25\"";
}
if($fields_labels_ar[$i]["maxlength_field"] != "") {
$form .= " maxlength=\"" . $fields_labels_ar[$i]["maxlength_field"] . "\"";
}
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
$form .= " value=\"" . htmlspecialchars($details_row[$field_name_temp]) . "\"";
}
if($form_type == "insert") {
$form .= " value=\"" . htmlspecialchars($fields_labels_ar[$i]["prefix_field"] . $fields_labels_ar[$i]["default_value_field"]) . "\"";
}
$form .= " /></td>";
break;
case "generic_file":
case "image_file":
if($form_type == "search") {
// build a textbox instead of a file input
$form .= "<td class=\"td_input_form\">" . $select_type_select . "<input type=\"text\" name=\"" . htmlspecialchars($field_name_temp) . "\"id=\"" . htmlspecialchars($field_name_temp) . "\" size=\"" . $fields_labels_ar[$i]["width_field"] . "\" />";
}
else {
$form .= "<td class=\"td_input_form\"><input type=\"file\" name=\"" . htmlspecialchars($field_name_temp) . "\" id=\"" . htmlspecialchars($field_name_temp) . "\" size=\"" . $fields_labels_ar[$i]["width_field"] . "\" />";
if($form_type == "update" or $form_type == "ext_update") {
$file_name_temp = substr($details_row[$field_name_temp], 18 + strlen($table_name) + 1);
if($file_name_temp != "") {
$form .= "<br />" . $normal_messages_ar["current_upload"] . ": <p><a href=\"" . $upload_relative_url . $table_name . "/";
$form .= str_replace("%2F", "/", rawurlencode($file_name_temp));
$form .= "\">";
$form .= htmlspecialchars($file_name_temp);
$form .= "</a> <input type=\"checkbox\" value=\"" . htmlspecialchars($file_name_temp) . "\" name=\"" . htmlspecialchars($field_name_temp) . "_file_uploaded_delete\" id=\"" . htmlspecialchars($field_name_temp) . "_file_uploaded_delete\" /> (" . $normal_messages_ar['delete'] . ") <input type=\"hidden\" value=\"" . htmlspecialchars($file_name_temp) . "\" name=\"" . htmlspecialchars($field_name_temp) . "_file_uploaded_delete2\" id=\"" . htmlspecialchars($field_name_temp) . "_file_uploaded_delete2\" />";
}
// end if
}
// end if
}
$form .= "</td>";
break;
case "textarea":
$form .= "<td class=\"td_input_form\">" . $select_type_select . "</td>";
$form .= "<td class=\"td_input_form\"><textarea cols=\"" . $fields_labels_ar[$i]["width_field"] . "\" rows=\"" . $fields_labels_ar[$i]["height_field"] . "\" name=\"" . htmlspecialchars($field_name_temp) . "\" id=\"" . htmlspecialchars($field_name_temp) . "\">";
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
$form .= htmlspecialchars($details_row[$field_name_temp]);
}
// end if
if($form_type == "insert") {
$form .= htmlspecialchars($fields_labels_ar[$i]["prefix_field"] . $fields_labels_ar[$i]["default_value_field"]);
}
// end if
$form .= "</textarea></td>";
break;
case "rich_editor":
$form .= "<td class=\"td_input_form\">" . $select_type_select . "</td>";
$form .= "<td class=\"td_input_form\"><textarea cols=\"" . $fields_labels_ar[$i]["width_field"] . "\" rows=\"" . $fields_labels_ar[$i]["height_field"] . "\" name=\"" . htmlspecialchars($field_name_temp) . "\" name=\"" . htmlspecialchars($field_name_temp) . "\">";
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
$form .= htmlspecialchars($details_row[$field_name_temp]);
}
// end if
if($form_type == "insert") {
$form .= htmlspecialchars($fields_labels_ar[$i]["prefix_field"] . $fields_labels_ar[$i]["default_value_field"]);
}
// end if
$form .= "</textarea></td>";
$form .= "<script type=\"text/javascript\" language=\"javascript\">
<![CDATA[
editor_generate('" . $field_name_temp . "');
]]>
</script>";
break;
case "password":
$form .= "<td class=\"td_input_form\">" . $select_type_select . "<input type=\"password\" name=\"" . htmlspecialchars($field_name_temp) . "\"id=\"" . htmlspecialchars($field_name_temp) . "\" size=\"" . $fields_labels_ar[$i]["width_field"] . "\" maxlength=\"" . $fields_labels_ar[$i]["maxlength_field"] . "\"";
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
$form .= " value=\"" . htmlspecialchars($details_row[$field_name_temp]) . "\"";
}
// end if
$form .= " /></td>";
break;
case "date":
switch($form_type) {
case "update":
case "copy":
split_date($details_row[$field_name_temp], $day, $month, $year);
$date_select = build_date_select($field_name_temp, $day, $month, $year);
break;
case "insert":
$date_select = build_date_select($field_name_temp, "", "", "");
break;
case "search":
$date_select = build_date_select($field_name_temp, "", "", "");
break;
}
// end switch
$form .= "<td class=\"td_input_form\">" . $select_type_date_select . "</td>" . $date_select;
break;
case "insert_date":
case "update_date":
$date_select = "";
switch($form_type) {
case "search":
$date_select = build_date_select($field_name_temp, "", "", "");
break;
}
// end switch
$form .= "<td class=\"td_input_form\">" . $select_type_date_select . "</td>" . $date_select . "</td>";
break;
case "select_single":
if(!isset($details_row[$field_name_temp])) {
$details_row[$field_name_temp] = "";
}
$to_fill = $details_row[$field_name_temp];
// in case field was select_multiple type before, remove separators
$separator_first_check = stripos($to_fill, $fields_labels_ar[$i]["separator_field"]);
$separator_last_check = strripos($to_fill, $fields_labels_ar[$i]["separator_field"]);
if($separator_first_check == "0" and $separator_last_check == (strlen($to_fill) - 1)) {
$to_fill = substr($to_fill, 1, - 1);
}
$form .= "<td class=\"td_input_form\">" . $select_type_select . "<select single=\"single\" name=\"" . htmlspecialchars($field_name_temp) . "\" id=\"" . htmlspecialchars($field_name_temp) . "\">";
if($fields_labels_ar[$i]["other_choices_field"] == "1") {
$form .= "<option value=\"\">Choose one, or type ...</option>";
}
else {
$form .= "<option value=\"\">Choose one ...</option>";
}
// generate options for pull down menu
$field_temp = substr($fields_labels_ar[$i]["select_options_field"], 1, - 1);
// delete the first and the last separator: ~Paris~London~Delhi~
if(trim($field_temp) !== '') {
$select_values_ar = explode($fields_labels_ar[$i]["separator_field"], $field_temp);
$count_temp = count($select_values_ar);
$any_selected_check = array();
for($j = 0; $j < $count_temp; $j++) {
$form .= "<option value=\"" . htmlspecialchars($select_values_ar[$j]) . "\"";
// if form to edit
if(($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") and ($select_values_ar[$j] == $to_fill)) {
$form .= " selected =\"selected\"";
$any_selected_check[] = "yes";
}
else {
$any_selected_check[] = "no";
}
$form .= ">" . htmlspecialchars($select_values_ar[$j]) . "</option>";
}
// end if form to edit
}
// end generating options
if($fields_labels_ar[$i]["primary_key_field_field"] != "") {
// if from foreign table
$any_selected_check = array();
if(database_num_rows($res_primary_key) > 0) {
// get values from foreign table
$fields_number = database_num_fields($res_primary_key);
while($primary_key_row = database_fetch_array($res_primary_key)) {
$linked_fields_value = "";
for($z = 0; $z < $fields_number;++$z) {
$linked_fields_value .= $primary_key_row[$z];
$linked_fields_value .= " - ";
}
// end for
$linked_fields_value = substr($linked_fields_value, 0, - 3);
// delete last " -
$form .= "<option value=\"" . htmlspecialchars($linked_fields_value) . "\"";
if(($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") and ($linked_fields_value == $to_fill)) {
$form .= " selected =\"selected\"";
$any_selected_check[] = "yes";
}
else {
$any_selected_check[] = "no";
}
$form .= ">" . htmlspecialchars($linked_fields_value) . "</option>";
}
// end while
}
// end if
}
// end if from foreign table
$form .= "</select>";
// input box - if user allowed to type in other choice
if($fields_labels_ar[$i]["other_choices_field"] == "1" and ($form_type == "insert" or $form_type == "update" or $form_type == "copy" or $form_type == "search")) {
$form .= "<br /><input type=\"text\" name=\"" . htmlspecialchars($field_name_temp) . "_other____\" id=\"" . htmlspecialchars($field_name_temp) . "_other____\" maxlength=\"" . $fields_labels_ar[$i]["maxlength_field"] . "\"";
if($fields_labels_ar[$i]["width_field"] != "") {
$form .= " size=\"" . $fields_labels_ar[$i]["width_field"] . "\"";
}
if(!in_array("yes", $any_selected_check)) {
$form .= " value=\"" . htmlspecialchars($to_fill) . "\"";
}
$form .= " />";
}
// end box for other choice
$form .= "</td>";
break;
case "select_multiple":
case "select_multiple_checkbox":
$what_selected_check = array();
$form .= "<td class=\"td_input_form\">";
if($fields_labels_ar[$i]["other_choices_field"] == "1") {
$form .= "Choose, and/or type ...<br />";
}
else {
$form .= "Choose ...<br />";
}
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= "<select name=\"" . htmlspecialchars($field_name_temp) . "[]\" id=\"" . htmlspecialchars($field_name_temp) . "[]\" size=\"" . $size_multiple_select . "\" multiple=\"multiple\">";
}
// if options provided
if($fields_labels_ar[$i]["select_options_field"] != "") {
$options_labels_temp = substr($fields_labels_ar[$i]["select_options_field"], 1, - 1);
$select_labels_ar = explode($fields_labels_ar[$i]["separator_field"], $options_labels_temp);
$select_labels_ar_number = count($select_labels_ar);
$any_selected_check = array();
for($j = 0; $j < $select_labels_ar_number; $j++) {
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= "<option value=\"" . htmlspecialchars($select_labels_ar[$j]) . "\"";
}
elseif($fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$form .= "<input type=\"checkbox\" name=\"" . htmlspecialchars($field_name_temp) . "[]\" id=\"" . htmlspecialchars($field_name_temp) . "[]\" value=\"" . htmlspecialchars($select_labels_ar[$j]) . "\"";
}
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
$options_values_temp = $details_row[$field_name_temp];
// in case no separators flank - if was select_single before
$separator_first_check = stripos($options_values_temp, $fields_labels_ar[$i]["separator_field"]);
$separator_last_check = strripos($options_values_temp, $fields_labels_ar[$i]["separator_field"]);
if($separator_first_check == "0" and $separator_last_check == (strlen($options_values_temp) - 1)) {
$options_values_temp = substr($options_values_temp, 1, - 1);
}
$select_values_ar = explode($fields_labels_ar[$i]["separator_field"], $options_values_temp);
if(in_array($select_labels_ar[$j], $select_values_ar)) {
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= " selected=\"selected\"";
}
elseif($fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$form .= " checked=\"checked\"";
}
$what_selected_check[] = $select_labels_ar[$j];
}
}
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= "> " . htmlspecialchars($select_labels_ar[$j]) . "</option>";
}
elseif($fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$form .= " /> " . htmlspecialchars($select_labels_ar[$j]) . "<br />";
}
}
// end for
}
// end if options provided
// if from foreign table
if($fields_labels_ar[$i]["primary_key_field_field"] != "") {
// if any value in foreign able that can be used as option
if(database_num_rows($res_primary_key) > 0) {
// get options to build menu
// get number of fields to work with; if only main field, is 1. If one linked field, 2, and so on
$fields_number = database_num_fields($res_primary_key);
// get from all the rows - main and any linked fields
$options_array = array();
while($primary_key_row = database_fetch_array($res_primary_key)) {
$linked_fields_value = "";
for($z = 0; $z < $fields_number; $z++) {
$linked_fields_value .= $primary_key_row[$z];
$linked_fields_value .= " - ";
}
// end for
$linked_fields_value = substr($linked_fields_value, 0, - 3);
// delete last " - "
// put into array
$options_array[] = $linked_fields_value;
}
// end getting options to build menu
// if form is to edit, get current filled values
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
// getting current filled in values
$options_values_temp = $details_row[$field_name_temp];
// in case no separators flank - if was select_single type before
$separator_first_check = stripos($options_values_temp, $fields_labels_ar[$i]["separator_field"]);
$separator_last_check = strripos($options_values_temp, $fields_labels_ar[$i]["separator_field"]);
if($separator_first_check == "0" and $separator_last_check == (strlen($options_values_temp) - 1)) {
$options_values_temp = substr($options_values_temp, 1, - 1);
}
// put into array; as is something like ~abc~def~ghi~
$select_values_ar = explode($fields_labels_ar[$i]["separator_field"], $options_values_temp);
// to keep track of matches
$what_selected_check = array();
}
// start building menu
foreach($options_array as $key=>$option_value) {
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= "<option value=\"" . htmlspecialchars($option_value) . "\"";
}
elseif($fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$form .= "<input type=\"checkbox\" name=\"" . htmlspecialchars($field_name_temp) . "[]\" id=\"" . htmlspecialchars($field_name_temp) . "[]\" value=\"" . htmlspecialchars($option_value) . "\"";
}
// show filled in in if in edit form
if($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
if(in_array($option_value, $select_values_ar)) {
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= " selected=\"selected\"";
}
elseif($fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$form .= " checked=\"checked\"";
}
$what_selected_check[] = $option_value;
}
}
// end showing filled in if form type is edit
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= "> " . htmlspecialchars($option_value) . "</option>";
}
elseif($fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$form .= " /> " . htmlspecialchars($option_value) . "<br />";
}
}
// end foreach for building menu
}
// end if any value in foreign table
}
// end if from foreign table
// finish the menu
if($fields_labels_ar[$i]["type_field"] == "select_multiple") {
$form .= "</select>";
}
// start input box if allowed ('other choice')
if($fields_labels_ar[$i]["other_choices_field"] == "1" and ($form_type == "insert" or $form_type == "update" or $form_type == "copy" or $form_type == "search")) {
$form .= "<br /><input type=\"text\" name=\"" . htmlspecialchars($field_name_temp) . "[]\" id=\"" . htmlspecialchars($field_name_temp) . "[]\" maxlength=\"" . $fields_labels_ar[$i]["maxlength_field"] . "\"";
if($fields_labels_ar[$i]["width_field"] != "") {
$form .= " size=\"" . $fields_labels_ar[$i]["width_field"] . "\"";
}
else {
$form .= " size=\"25\"";
}
// start if form is to edit - again; to fill in a value in box
if(($form_type == "update" or $form_type == "ext_update" or $form_type == "copy") and (isset($select_values_ar) and isset($what_selected_check))) {
$for_box_array = array_diff($select_values_ar, $what_selected_check);
if(count($for_box_array) > 0) {
$for_box_string = implode($fields_labels_ar[$i]["separator_field"], $for_box_array);
$form .= " value=\"";
$form .= htmlspecialchars($for_box_string);
$form .= "\"";
}
}
// end if form is to edit - again; to fill in a value in textbox
$form .= " />";
}
$form .= "</td>";
break;
}
// end switch ($fields_labels_ar[$i]["type_field"]) ------------------------------------
/////////////////////////////////////////
// end build the second coloumn (input field)
if($form_type == "insert" or $form_type == "update" or $form_type == "ext_update" or $form_type == "copy") {
$form .= "<td class=\"td_hint_form\">" . $fields_labels_ar[$i]["hint_insert_field"] . "</td>";
}
$form .= "</tr></table></td></tr>";
}
// end if ($fields_labels_ar[$i]["$field_to_ceck"] == "1")
}
// end for loop for each field in the label array
$form .= "<tr><td class=\"tr_button_form\" colspan=\"" . $number_cols . "\"><p><input type=\"submit\" class=\"button_form\" value=\"" . $submit_buttons_ar[$form_type] . "\" /></p></td></tr></table></form>";
return $form;
}
// end build_form function
// goal: build a select with the select type of the field (e.g. is_equal, contains....)
// input: $field_name, $select_type (e.g. is_equal/contains), $first_option_blank(0|1)
// output: $select_type_select
// global: $normal_messages_ar, the array containing the normal messages
function build_select_type_select($field_name, $select_type, $first_option_blank) {
global $normal_messages_ar;
$select_type_select = "";
$operators_ar = explode("/", $select_type);
if(count($operators_ar) > 1) {
// more than on operator, need a select
$select_type_select .= "<select single=\"single\" name=\"" . htmlspecialchars($field_name) . "\" id=\"" . htmlspecialchars($field_name) . "\">";
$count_temp = count($operators_ar);
if($first_option_blank === 1) {
$select_type_select .= "<option value=\"\"></option>";
}
// end if
for($i = 0; $i < $count_temp; $i++) {
$select_type_select .= "<option value=\"" . htmlspecialchars($operators_ar[$i]) . "\">" . $normal_messages_ar[$operators_ar[$i]] . "</option>";
}
// end for
$select_type_select .= "</select>";
}
// end if
else {
// just an hidden
$select_type_select .= "<input type=\"hidden\" name=\"" . htmlspecialchars($field_name) . "\" id=\"" . htmlspecialchars($field_name) . "\" value=\"" . htmlspecialchars($operators_ar[0]) . "\" />";
}
return $select_type_select;
}
// end function build_select_type_select
// goal: check if the user has filled all the required fields
// input: all the fields values ($_POST), $_FILES (for uploaded files) and the array containing infos about fields ($fields_labels_ar)
// output: $check, set to 1 if the check is ok, otherwise 0
function check_required_fields($fields_labels_ar) {
$i = 0;
$check = 1;
$count_temp = count($fields_labels_ar);
while($i < $count_temp and $check == 1) {
if($fields_labels_ar[$i]["required_field"] == "1" and $fields_labels_ar[$i]["present_insert_form_field"] == "1") {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
switch($fields_labels_ar[$i]["type_field"]) {
case "date":
break;
// date is always filled
case "select_single":
if($fields_labels_ar[$i]["other_choices_field"] == "1") {
$field_name_other_temp = $field_name_temp . "_other____";
if($_POST["$field_name_other_temp"] == "" and $_POST[$field_name_temp] == "") {
$check = 0;
}
// end if
}
// end if
else {
if($_POST[$field_name_temp] == "") {
$check = 0;
}
// end if
}
// end else
break;
case "select_multiple":
case "select_multiple_checkbox":
$stringed = implode("", $_POST[$field_name_temp]);
if(strlen($stringed) < 1) {
$check = 0;
}
break;
case "generic_file":
case "image_file":
if($_FILES[$field_name_temp]['name'] != '' OR $_POST[$field_name_temp] != '' OR ($_POST[$field_name_temp . '_file_uploaded_delete2'] != '' and !isset($_POST[$field_name_temp . '_file_uploaded_delete']))) {
$check = 1;
}
else {
$check = 0;
}
break;
default:
if($_POST[$field_name_temp] == $fields_labels_ar[$i]["prefix_field"]) {
$_POST[$field_name_temp] = "";
}
// end if
if($_POST[$field_name_temp] == "") {
$check = 0;
}
// end if
break;
}
// end switch
}
// end if
$i++;
}
// end while
return $check;
}
// end function check_required_fields
// goal: check if the text, password, textarea, rich_editor, select_single, select_multiple_checkbox, select_multiple fields contains too much text
// input: all the fields values ($_POST) and the array containing infos about fields ($fields_labels_ar)
// output: $check, set to 1 if the check is ok, otherwise 0
function check_length_fields($fields_labels_ar) {
$i = 0;
$check = 1;
if(!isset($fields_labels_ar[0])) {
return $check;
}
$count_temp = count($fields_labels_ar);
while($i < $count_temp and $check == 1) {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
// I use isset for select_multiple because could be unset
if($fields_labels_ar[$i]["maxlength_field"] != "" && isset($_POST[$field_name_temp])) {
switch($fields_labels_ar[$i]["type_field"]) {
case "text":
case "password":
case "textarea":
case "rich_editor":
if(strlen($_POST[$field_name_temp]) > $fields_labels_ar[$i]["maxlength_field"]) {
$check = 0;
}
// end if
break;
case "select_multiple_checkbox":
case "select_multiple":
$count_temp_2 = count($_POST[$field_name_temp]);
$value_temp = "";
for($j = 0; $j < $count_temp_2; $j++) {
$value_temp .= $fields_labels_ar[$i]["separator_field"] . $_POST[$field_name_temp][$j];
}
$value_temp .= $fields_labels_ar[$i]["separator_field"];
// add the last separator
if(strlen($value_temp) > $fields_labels_ar[$i]["maxlength_field"]) {
$check = 0;
}
// end if
break;
case "select_single":
if($fields_labels_ar[$i]["other_choices_field"] == "1" and $_POST[$field_name_temp] == "......") {
$field_name_other_temp = $field_name_temp . "_other____";
if(strlen($_POST[$field_name_other_temp]) > $fields_labels_ar[$i]["maxlength_field"]) {
$check = 0;
}
// end if
}
// end if
else {
if(strlen($_POST[$field_name_temp]) > $fields_labels_ar[$i]["maxlength_field"]) {
$check = 0;
}
// end if
}
// end else
break;
}
// end switch
}
// end if
$i++;
}
// end while
return $check;
}
// end function check_length_fields
// goal: write an upload file with a temporary name, checking the size and the file extension, the correct name will be assigned later in insert_record or update_record
// input: all the uploaded files ($_FILES) and the array containing infos about fields ($fields_labels_ar)
// output: $check, set to 1 everyhings is fine (also the write procedure), otherwise 0
function write_temp_uploaded_files($fields_labels_ar) {
global $upload_directory, $max_upload_file_size, $allowed_file_exts_ar, $allowed_all_files, $table_name;
// START make table-specific upload directory
$upload_directory2 = $upload_directory . $table_name . DIRECTORY_SEPARATOR;
if(!file_exists($upload_directory2)) {
mkdir($upload_directory2);
}
if(file_exists($upload_directory2) and !is_dir($upload_directory2)) {
unlink($upload_directory2);
mkdir($upload_directory2);
}
$uploaded_file_names_count = 0;
// END make table-specific upload directory
$uploaded_file_names_ar = array();
$i = 0;
$check = 1;
$count_temp = count($fields_labels_ar);
while($i < $count_temp and $check == 1) {
switch($fields_labels_ar[$i]["type_field"]) {
case "generic_file":
case "image_file":
$field_name_temp = $fields_labels_ar[$i]["name_field"];
if($_FILES[$field_name_temp]['name'] != '') {
$file_name_temp = $_FILES[$field_name_temp]['tmp_name'];
$file_name = get_magic_quotes_gpc() ? strip_slashes($_FILES[$field_name_temp]['name']) : $_FILES[$field_name_temp]['name'];
$file_name = get_valid_name_uploaded_file($file_name, 1);
$file_size = $_FILES[$field_name_temp]['size'];
$file_suffix_temp = strrchr($file_name, ".");
$file_suffix_temp = substr($file_suffix_temp, 1);
// remove the first dot
if(!in_array(strtolower($file_suffix_temp), $allowed_file_exts_ar) && $allowed_all_files != 1) {
$check = 0;
}
else {
if($file_size > $max_upload_file_size) {
$check = 0;
}
else {
//go ahead and copy the file into the upload directory
if(!(move_uploaded_file($file_name_temp, $upload_directory2 . 'dadabik_tmp_file_' . $file_name))) {
$check = 0;
}
}
// end else
}
// end else
}
// end if
break;
}
// end switch
$i++;
}
// end while
return $check;
}
// end function write_temp_uploaded_files
// goal: check if the user has well filled the form, according to the type of the field (e.g. no numbers in alphabetic fields, emails and urls correct)
// input: all the fields values ($_POST) and the array containing infos about fields ($fields_labels_ar), &$content_error_type, a string that change according to the error made (alphabetic, numeric, email, phone, url....)
// output: $check, set to 1 if the check is ok, otherwise 0
function check_fields_types($fields_labels_ar, &$content_error_type) {
$i = 0;
$check = 1;
$count_temp = count($fields_labels_ar);
while($i < $count_temp and $check == 1) {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
if(isset($_POST[$field_name_temp])) {
// otherwise it has not been filled
if($_POST[$field_name_temp] == $fields_labels_ar[$i]["prefix_field"]) {
$_POST[$field_name_temp] = "";
}
// end if
if($fields_labels_ar[$i]["type_field"] == "select_single" && $fields_labels_ar[$i]["other_choices_field"] == "1" and $_POST[$field_name_temp] == "......") {
// other field filled
$field_name_temp = $field_name_temp . "_other____";
}
// end if
if(($fields_labels_ar[$i]["type_field"] == "text" || $fields_labels_ar[$i]["type_field"] == "textarea" || $fields_labels_ar[$i]["type_field"] == "rich_editor" || $fields_labels_ar[$i]["type_field"] == "select_single" || $fields_labels_ar[$i]["type_field"] == "select_multiple" || $fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") and $fields_labels_ar[$i]["present_insert_form_field"] == "1" and $_POST[$field_name_temp] != "") {
switch($fields_labels_ar[$i]["content_field"]) {
case "alphabetic":
if($fields_labels_ar[$i]["type_field"] == "select_multiple" || $fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$count_temp_2 = count($_POST[$field_name_temp]);
$j = 0;
while($j < $count_temp_2 && $check == 1) {
if(contains_numerics($_POST[$field_name_temp][$j])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
$j++;
}
}
else {
if(contains_numerics($_POST[$field_name_temp])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
}
break;
case "numeric":
if($fields_labels_ar[$i]["type_field"] == "select_multiple" || $fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$count_temp_2 = count($_POST[$field_name_temp]);
$j = 0;
while($j < $count_temp_2 && $check == 1) {
if(!is_numeric($_POST[$field_name_temp][$j])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
$j++;
}
}
else {
if(!is_numeric($_POST[$field_name_temp])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
}
break;
case "phone":
if($fields_labels_ar[$i]["type_field"] == "select_multiple" || $fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$count_temp_2 = count($_POST[$field_name_temp]);
$j = 0;
while($j < $count_temp_2 && $check == 1) {
if(!is_valid_phone($_POST[$field_name_temp][$j])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
$j++;
}
}
else {
if(!is_valid_phone($_POST[$field_name_temp])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
}
break;
case "email":
if($fields_labels_ar[$i]["type_field"] == "select_multiple" || $fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$count_temp_2 = count($_POST[$field_name_temp]);
$j = 0;
while($j < $count_temp_2 && $check == 1) {
if(!is_valid_email($_POST[$field_name_temp][$j])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
$j++;
}
}
else {
if(!is_valid_email($_POST[$field_name_temp])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
}
break;
case "url":
if($fields_labels_ar[$i]["type_field"] == "select_multiple" || $fields_labels_ar[$i]["type_field"] == "select_multiple_checkbox") {
$count_temp_2 = count($_POST[$field_name_temp]);
$j = 0;
while($j < $count_temp_2 && $check == 1) {
if(!is_valid_url($_POST[$field_name_temp][$j])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
$j++;
}
}
else {
if(!is_valid_url($_POST[$field_name_temp])) {
$check = 0;
$content_error_type = $fields_labels_ar[$i]["content_field"];
}
// end if
}
break;
}
// end switch
}
// end if
}
// end if
elseif($fields_labels_ar[$i]["type_field"] == "date") {
$day = $_POST[$field_name_temp . "_day"];
$month = $_POST[$field_name_temp . "_month"];
$year = $_POST[$field_name_temp . "_year"];
if(!is_numeric($day) || !is_numeric($month) || !is_numeric($year) || !checkdate($month, $day, $year)) {
$check = 0;
$content_error_type = "date";
}
// end if
}
$i++;
}
// end while
return $check;
}
// end function check_fields_types
// goal: build the select query to select the record that can be similar to the record inserted
// input: all the field values ($_POST), $table_name, $fields_labels_ar, &$string1_similar_ar, &$string2_similar_ar (the two array that will contain the similar string found)
// output: $sql, the sql query
// global $percentage_similarity, the percentage after that two strings are considered similar, $number_duplicated_records, the maximum number of records to be displayed as duplicated
function build_select_duplicated_query($table_name, $fields_labels_ar, &$string1_similar_ar, &$string2_similar_ar) {
global $percentage_similarity, $number_duplicated_records, $conn;
// get the unique key of the table
$unique_field_name = get_unique_field($table_name);
if($unique_field_name != "") {
$sql = "";
$sql_select_all = "";
$sql_select_all = "SELECT `" . add_slashes($unique_field_name, 1) . "`, ";
// this is used to select the records to check similiarity
$select = "SELECT * FROM `" . add_slashes($table_name, 1) . '`';
$where_clause = "";
// build the sql_select_all clause
$j = 0;
// build the $fields_to_check_ar array, containing the field to check for similiarity
$fields_to_check_ar = array();
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["check_duplicated_insert_field"] == "1") {
//if (${$fields_labels_ar[$i]["name_field"]} != ""){
$fields_to_check_ar[$j] = $fields_labels_ar[$i]["name_field"];
// I put in the array only if the field is non empty, otherwise I'll check it even if I don't need it
//} // end if
$sql_select_all .= '`' . add_slashes($fields_labels_ar[$i]["name_field"], 1) . "`, ";
$j++;
}
// end if
}
// end for
$sql_select_all = substr($sql_select_all, 0, - 2);
// delete the last ", "
$sql_select_all .= " FROM `" . add_slashes($table_name, 1) . '`';
// end build the sql_select_all clause
// at the end of the above procedure I'll have, for example, "select ID, name, email from table" if ID is the unique key, name and email are field to check
// execute the select query
$res_contacts = execute_db($sql_select_all, $conn, 'business_logic.php');
if(database_num_rows($res_contacts) > 0) {
while($contacts_row = database_fetch_array($res_contacts)) {
// *A* for each record in the table
$count_temp = count($fields_to_check_ar);
for($i = 0; $i < $count_temp; $i++) {
// *B* and for each field the user has inserted
$z = 0;
$found_similarity = 0;
// set to 1 when a similarity is found, so that it's possible to exit the loop (if I found that a record is similar it doesn't make sense to procede with other fields of the same record)
// *C* check if the field inserted are similiar to the other fields to be checked in this record (*A*)
$count_temp_2 = count($fields_to_check_ar);
while($z < $count_temp_2 and $found_similarity == 0) {
$string1_temp = $_POST[$fields_to_check_ar[$i]];
// the field the user has inserted
$string2_temp = $contacts_row[$z + 1];
// the field of this record (*A*); I start with 1 because 0 is alwais the unique field (e.g. ID, name, email)
similar_text(strtolower($string1_temp), strtolower($string2_temp), $percentage);
if($percentage >= $percentage_similarity) {
// the two strings are similar
$where_clause .= '`' . add_slashes($unique_field_name, 1) . "` = " . add_slashes($contacts_row[$unique_field_name]) . " or ";
$found_similarity = 1;
$string1_similar_ar[] = $string1_temp;
$string2_similar_ar[] = $string2_temp;
}
// end if the two strings are similar
$z++;
}
// end while
}
// end for loop for each field to check
}
// end while loop for each record
}
// end if (database_num_rows($res_contacts) > 0)
$where_clause = substr($where_clause, 0, - 4);
// delete the last " or "
if($where_clause != "") {
$sql = $select . " where " . $where_clause . " limit 0," . $number_duplicated_records;
}
// end if
else {
// no duplication
$sql = "";
}
// end else*
}
// end if if ($unique_field_name != "")
else {
// no unique keys
$sql = "";
}
// end else
return $sql;
}
// end function build_select_duplicated_query
// goal: build a tabled form composed by two buttons: "Insert anyway" and "Go back"
// input: all the field values ($_POST), $fields_labels_ar, $conn, $table_name, $table_internal_name
// output: $form, the form
// global $submit_buttons_ar, the array containing the caption on submit buttons
function build_insert_duplication_form($fields_labels_ar, $table_name, $table_internal_name) {
global $submit_buttons_ar, $dadabik_main_file;
$form = "";
$form .= "<table summary=\"none\"><tr><td>";
$form .= "<form action=\"" . $dadabik_main_file . "?table_name=" . rawurlencode($table_name) . "&function=insert&insert_duplication=1\" method=\"post\"><p>";
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
if($fields_labels_ar[$i]["present_insert_form_field"] == "1") {
switch($fields_labels_ar[$i]["type_field"]) {
case "select_multiple":
case "select_multiple_checkbox":
if(isset($_POST[$field_name_temp])) {
$count_temp_2 = count($_POST[$field_name_temp]);
for($j = 0; $j < $count_temp_2; $j++) {
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($field_name_temp) . "[" . $j . "]" . "\"
id=\"" . htmlspecialchars($field_name_temp) . "[" . $j . "]" . "\" value=\"" . htmlspecialchars($_POST[$field_name_temp][$j]) . "\" />";
// add the field value to the sql statement
}
// end for
}
// end if
break;
case "date":
$year_field = $field_name_temp . "_year";
$month_field = $field_name_temp . "_month";
$day_field = $field_name_temp . "_day";
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($year_field) . "\" idname=\"" . htmlspecialchars($year_field) . "\" value=\"" . htmlspecialchars($_POST[$year_field]) . "\" />";
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($month_field) . "\" id=\"" . htmlspecialchars($month_field) . "\" value=\"" . htmlspecialchars($_POST[$month_field]) . "\" />";
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($day_field) . "\" id=\"" . htmlspecialchars($day_field) . "\" value=\"" . htmlspecialchars($_POST[$day_field]) . "\" />";
break;
case "select_single":
if($fields_labels_ar[$i]["other_choices_field"] == "1" and $_POST[$field_name_temp] == "......") {
// other choice filled
$field_name_other_temp = $field_name_temp . "_other____";
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($field_name_temp) . "\" id=\"" . htmlspecialchars($field_name_temp) . "\"
value=\"" . htmlspecialchars($_POST[$field_name_temp]) . "\" />";
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($field_name_other_temp) . "\" id=\"" . htmlspecialchars($field_name_other_temp) . "\"
value=\"" . htmlspecialchars($_POST[$field_name_other_temp]) . "\" />";
}
// end if
else {
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($field_name_temp) . "\" id=\"" . htmlspecialchars($field_name_temp) . "\"
value=\"" . htmlspecialchars($_POST[$field_name_temp]) . "\" />";
}
// end else
break;
default:
// textual field
if($_POST[$fields_labels_ar[$i]["name_field"]] == $fields_labels_ar[$i]["prefix_field"]) {
// the field contain just the prefix
$_POST[$fields_labels_ar[$i]["name_field"]] = "";
}
// end if
$form .= "<input type=\"hidden\" name=\"" . htmlspecialchars($field_name_temp) . "\" id=\"" . htmlspecialchars($field_name_temp) . "\"
value=\"" . htmlspecialchars($_POST[$fields_labels_ar[$i]["name_field"]]) . "\" />";
break;
}
// end switch
}
// end if
}
// end for
$form .= "<input type=\"submit\" value=\"" . $submit_buttons_ar["insert_anyway"] . "\"></p></form>";
$form .= "</td><td>";
$form .= "<form><p><input type=\"button\" value=\"" . $submit_buttons_ar["go_back"] . "\" onclick=\"javascript:history.back(-1)\" /></p></form>";
$form .= "</td></tr></table>";
return $form;
}
// end function build_insert_duplication_form
// goal: build a select to choose the table
// input: $exclude_not_allowed, $include_users_table (1 if it is necessary to include the users table, even if the user is not admin (useful in admin.php)
// output: $select, the html select
function build_change_table_select($exclude_not_allowed = 1, $include_users_table = 0) {
global $conn, $table_name, $autosumbit_change_table_control;
$change_table_select = "";
$change_table_select .= "<select name=\"table_name\" class=\"select_change_table\"";
if($autosumbit_change_table_control == 1) {
$change_table_select .= " onchange=\"javascript:document.change_table_form.submit();\"";
}
$change_table_select .= ">";
if($exclude_not_allowed == 1) {
if($include_users_table == 0) {
// get the array containing the names of the tables installed(excluding not allowed)
$tables_names_ar = build_tables_names_array(1, 1, 0);
}
// end if
else {
// get the array containing the names of the tables installed(excluding not allowed)
$tables_names_ar = build_tables_names_array(1, 1, 1);
}
// end else
}
// end if
else {
if($include_users_table == 0) {
// get the array containing the names of the tables installed
$tables_names_ar = build_tables_names_array(0, 1, 0);
}
// end if
else {
// get the array containing the names of the tables installed
$tables_names_ar = build_tables_names_array(0, 1, 1);
}
// end else
}
// end else
$count_temp = count($tables_names_ar);
for($i = 0; $i < $count_temp; $i++) {
$change_table_select .= "<option value=\"" . htmlspecialchars($tables_names_ar[$i]) . "\"";
if($table_name == $tables_names_ar[$i]) {
$change_table_select .= " selected=\"selected\"";
}
$change_table_select .= ">" . htmlspecialchars($tables_names_ar[$i]) . "</option>";
}
// end for
$change_table_select .= "</select>";
if($count_temp == 1) {
return "";
}
// end if
else {
return $change_table_select;
}
// end else
}
// end function build_change_table_select
// goal: check if a table contains a record which has a field set to a specified value
// input: $db_name, $table_name, $field_name, $value
// output: true or false
function table_contains($db_name_2, $table_name, $field_name, $value) {
global $conn, $db_name;
if($db_name_2 != "") {
choose_db($db_name_2, $conn);
}
$sql = "SELECT COUNT(`" . add_slashes($field_name, 1) . "`) FROM `" . add_slashes($table_name, 1) . "` WHERE `" . add_slashes($field_name, 1) . "` = " . add_slashes($value);
$res_count = execute_db($sql, $conn, 'business_logic.php');
$count_row = database_fetch_array($res_count);
if($count_row[0] > 0) {
return true;
}
// end if
// re-select the old db
if($db_name_2 != "") {
choose_db($db_name, $conn);
}
return false;
}
// end function table_contains
// goal: insert a new record in the main database
// input $_FILES (needed for the name of the files), $_POST (the array containing all the values inserted in the form, $fields_labels_ar, $table_name, $table_internal_name, $where_field, $where_value, $update_type (internal or external)
// output: nothing
// global: $ext_updated_field, the field in which we set if a field has been updated
function update_record($fields_labels_ar, $table_name, $table_internal_name, $where_field, $where_value, $update_type) {
global $conn, $ext_updated_field, $upload_directory;
//START make table-specific upload directory
$upload_directory2 = $upload_directory . $table_name . '/';
if(!file_exists($upload_directory2)) {
mkdir($upload_directory2);
}
if(file_exists($upload_directory2) and !is_dir($upload_directory2)) {
unlink($upload_directory2);
mkdir($upload_directory2);
}
$uploaded_file_names_count = 0;
switch($update_type) {
case "internal":
$field_to_check = "present_insert_form_field";
break;
case "external":
$field_to_check = "present_ext_update_form_field";
break;
}
// end switch
// build the update statement
/////////////////////////////
$sql = "";
$sql .= "UPDATE `" . add_slashes($table_name, 1) . "` SET ";
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
if($fields_labels_ar[$i][$field_to_check] == "1" or $fields_labels_ar[$i]["type_field"] == "update_date") {
// if the field is in the form or need to be inserted because it's an update data
switch($fields_labels_ar[$i]["type_field"]) {
case "generic_file":
case "image_file":
$file_name = get_magic_quotes_gpc() ? strip_slashes($_FILES[$field_name_temp]['name']) : $_FILES[$field_name_temp]['name'];
if($file_name != '') {
// the user has selected a new file to upload
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$file_name = get_valid_name_uploaded_file($file_name, 0);
$file_name2 = $table_name . "/" . $file_name;
$sql .= add_slashes('The filepath is - ' . $file_name2) . ", ";
// add the field value to the sql statement
$uploaded_file_names_count++;
// rename the temp name of the uploaded file
copy($upload_directory2 . 'dadabik_tmp_file_' . $file_name, $upload_directory2 . $file_name);
unlink($upload_directory2 . 'dadabik_tmp_file_' . $file_name);
if(isset($_POST[$field_name_temp . '_file_uploaded_delete'])) {
// the users want to delete a file previously uploaded
unlink($upload_directory2 . $_POST[$field_name_temp . '_file_uploaded_delete']);
}
// end if
if(isset($_POST[$field_name_temp . '_file_uploaded_delete2'])) {
// delete a file previously uploaded
unlink($upload_directory2 . $_POST[$field_name_temp . '_file_uploaded_delete2']);
}
// end if
}
elseif(isset($_POST[$field_name_temp . '_file_uploaded_delete'])) {
// the user wants to delete a file previously uploaded
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$sql .= "'', ";
// add the field value to the sql statement
unlink($upload_directory2 . $_POST[$field_name_temp . '_file_uploaded_delete']);
}
break;
case "select_multiple":
case "select_multiple_checkbox":
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$count_temp_2 = count($_POST[$field_name_temp]);
$sqlN = '';
for($j = 0; $j < $count_temp_2; $j++) {
if(!(empty($_POST[$field_name_temp][$j]))) {
$sqlN .= $fields_labels_ar[$i]["separator_field"] . $_POST[$field_name_temp][$j];
$add_last = 'yes';
}
// end if
}
// end for
if(isset($add_last) and $add_last == 'yes') {
$sqlN .= $fields_labels_ar[$i]["separator_field"];
}
// add the last separator
$sql .= add_slashes($sqlN) . ", ";
break;
case "update_date":
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$sql .= add_slashes(date("Y-m-d H:i:s")) . ", ";
// add the field name to the sql statement
break;
case "date":
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$field_name_temp = $field_name_temp;
$year_field = $field_name_temp . "_year";
$month_field = $field_name_temp . "_month";
$day_field = $field_name_temp . "_day";
$mysql_date_value = $_POST[$year_field] . "-" . $_POST[$month_field] . "-" . $_POST[$day_field];
$sql .= add_slashes($mysql_date_value) . ", ";
// add the field value to the sql statement
break;
case 'select_single':
$field_name_other_temp = $field_name_temp . "_other____";
if($fields_labels_ar[$i]["other_choices_field"] == "1" and $_POST[$field_name_temp] == "" and $_POST[$field_name_other_temp] != "") {
// insert the "other...." choice
$primary_key_field_field = $fields_labels_ar[$i]["primary_key_field_field"];
if($primary_key_field_field != "") {
$linked_fields_ar = explode($fields_labels_ar[$i]["separator_field"], $fields_labels_ar[$i]["linked_fields_field"]);
$primary_key_field_field = insert_other_field($fields_labels_ar[$i]["primary_key_db_field"], $fields_labels_ar[$i]["primary_key_table_field"], $linked_fields_ar[0], $_POST[$field_name_other_temp]);
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$sql .= add_slashes($primary_key_field_field) . ", ";
// add the field value to the sql statement
}
// end if ($foreign_key_temp != "")
else {
// no foreign key field
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$sql .= add_slashes($_POST[$field_name_other_temp]) . ", ";
// add the field value to the sql statement
if(strpos($fields_labels_ar[$i]["select_options_field"], $fields_labels_ar[$i]["separator_field"] . $_POST[$field_name_other_temp] . $fields_labels_ar[$i]["separator_field"]) === false) {
// the other field inserted is not already present in the $fields_labels_ar[$i]["select_options_field"] so we have to add it
if(isset($autoupdate_options) and $autoupdate_options == '1') {
udpate_options($fields_labels_ar[$i], $field_name_temp, $_POST[$field_name_other_temp]);
}
// re-get the array containg label ant other information about the fields changed with the above instruction
$fields_labels_ar = build_fields_labels_array($table_internal_name, "1");
}
// end if
}
// end else
}
// end if
else {
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$sql .= add_slashes($_POST[$field_name_temp]) . ", ";
// add the field value to the sql statement
}
// end else
break;
default:
// textual field
$sql .= '`' . add_slashes($field_name_temp, 1) . "` = ";
// add the field name to the sql statement
$sql .= add_slashes($_POST[$field_name_temp]) . ", ";
// add the field value to the sql statement
break;
}
// end switch
}
// end if
}
// end for
$sql = substr($sql, 0, - 2);
// delete the last two characters: ", "
$sql .= " where `" . add_slashes($where_field, 1) . "` = " . add_slashes($where_value) . " LIMIT 1";
$res_update = execute_db($sql, $conn, 'business_logic.php');
if($update_type == "external") {
$sql = "UPDATE `" . add_slashes($table_name, 1) . "` SET `" . add_slashes($ext_updated_field, 1) . "` = '1' WHERE `" . add_slashes($where_field, 1) . "` = " . add_slashes($where_value) . " LIMIT 1";
$res_update = execute_db($sql, $conn, 'business_logic.php');
}
// end if
}
// end function update_record
// goal: insert a new record in the table
// input $_FILES (needed for the name of the files), $_POST (the array containing all the values inserted in the form), $fields_labels_ar, $table_name, $table_internal_name
// output: nothing
function insert_record($fields_labels_ar, $table_name, $table_internal_name) {
global $conn, $db_name, $upload_directory, $current_user;
// START make table-specific upload directory
$upload_directory2 = $upload_directory . $table_name . DIRECTORY_SEPARATOR;
if(!file_exists($upload_directory2)) {
mkdir($upload_directory2);
}
if(file_exists($upload_directory2) and !is_dir($upload_directory2)) {
unlink($upload_directory2);
mkdir($upload_directory2);
}
$uploaded_file_names_count = 0;
// build the insert statement
/////////////////////////////
$sql = "";
$sql .= "INSERT INTO `" . add_slashes($table_name, 1) . "` (";
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["present_insert_form_field"] == "1" || $fields_labels_ar[$i]["type_field"] == "insert_date" || $fields_labels_ar[$i]["type_field"] == "update_date" || $fields_labels_ar[$i]["type_field"] == "ID_user" || $fields_labels_ar[$i]["type_field"] == "unique_ID") {
// if the field is in the form or need to be inserted because it's an insert data, an update data, an ID_user or a unique_ID
$sql .= '`' . add_slashes($fields_labels_ar[$i]["name_field"], 1) . "`, ";
// add the field name to the sql statement
}
// end if
}
// end for
$sql = substr($sql, 0, (strlen($sql) - 2));
$sql .= ") VALUES (";
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["present_insert_form_field"] == "1") {
// if the field is in the form
switch($fields_labels_ar[$i]["type_field"]) {
case "generic_file":
case "image_file":
$name_field_temp = $fields_labels_ar[$i]["name_field"];
$file_name = get_magic_quotes_gpc() ? strip_slashes($_FILES[$name_field_temp]['name']) : $_FILES[$name_field_temp]['name'];
if($file_name != '') {
$file_name = get_valid_name_uploaded_file($file_name, 0);
}
$file_name2 = $table_name . "/" . $file_name;
//$sql .= "'".add_slashes($uploaded_file_names_ar[$uploaded_file_names_count])."', "; // add the field value to the sql statement
$uploaded_file_names_count++;
if($file_name != '') {
// rename the temp name of the uploaded file
copy($upload_directory2 . 'dadabik_tmp_file_' . $file_name, $upload_directory2 . $file_name);
unlink($upload_directory2 . 'dadabik_tmp_file_' . $file_name);
$sql .= add_slashes('The filepath is - ' . $file_name2) . ", ";
// add the field value to the sql statement
}
// end if
else {
$sql .= "'', ";
}
// add the field value to the sql statement
break;
case "select_multiple":
case "select_multiple_checkbox":
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$sqlN = "";
if(isset($_POST[$fields_labels_ar[$i]["name_field"]])) {
// otherwise the user hasn't checked any options
$count_temp_2 = count($_POST[$fields_labels_ar[$i]["name_field"]]);
for($j = 0; $j < $count_temp_2; $j++) {
if(!(empty($_POST[$field_name_temp][$j]))) {
$sqlN .= $fields_labels_ar[$i]["separator_field"] . $_POST[$field_name_temp][$j];
$add_last = 'yes';
}
// end if
}
// end for
if(isset($add_last) and $add_last == 'yes') {
$sqlN .= $fields_labels_ar[$i]["separator_field"];
}
// add the last separator
}
// end if
$sql .= add_slashes($sqlN) . ", ";
break;
case "date":
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$year_field = $field_name_temp . "_year";
$month_field = $field_name_temp . "_month";
$day_field = $field_name_temp . "_day";
$mysql_date_value = $_POST[$year_field] . "-" . $_POST[$month_field] . "-" . $_POST[$day_field];
$sql .= add_slashes($mysql_date_value) . ", ";
// add the field value to the sql statement
break;
case "select_single":
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$field_name_other_temp = $fields_labels_ar[$i]["name_field"] . "_other____";
if($fields_labels_ar[$i]["other_choices_field"] == "1" and $_POST[$field_name_temp] == "" and $_POST[$field_name_other_temp] != "") {
// insert the "other...." choice
$primary_key_field_field = $fields_labels_ar[$i]["primary_key_field_field"];
if($primary_key_field_field != "") {
$linked_fields_ar = explode($fields_labels_ar[$i]["separator_field"], $fields_labels_ar[$i]["linked_fields_field"]);
$primary_key_field_field = insert_other_field($fields_labels_ar[$i]["primary_key_db_field"], $fields_labels_ar[$i]["primary_key_table_field"], $linked_fields_ar[0], $_POST[$field_name_other_temp]);
$sql .= add_slashes($primary_key_field_field) . ", ";
// add the last ID inserted to the sql statement
}
// end if ($foreign_key_temp != "")
else {
// no foreign key field
$sql .= add_slashes($_POST[$field_name_other_temp]) . ", ";
// add the field value to the sql statement
if(strpos($fields_labels_ar[$i]["select_options_field"], $fields_labels_ar[$i]["separator_field"] . $_POST[$field_name_other_temp] . $fields_labels_ar[$i]["separator_field"] === false)) {
// the other field inserted is not already present in the $fields_labels_ar[$i]["select_options_field"] so we have to add it
if(isset($autoupdate_options) and $autoupdate_options == '1') {
udpate_options($fields_labels_ar[$i], $field_name_temp, $_POST[$field_name_other_temp]);
}
// re-get the array containg label ant other information about the fields changed with the above instruction
$fields_labels_ar = build_fields_labels_array($table_internal_name, "1");
}
// end if
}
// end else
}
// end if
else {
$sql .= add_slashes($_POST[$field_name_temp]) . ", ";
// add the field value to the sql statement
}
// end else
break;
default:
// textual field and select single
if($_POST[$fields_labels_ar[$i]["name_field"]] == $fields_labels_ar[$i]["prefix_field"]) {
// the field contain just the prefix
$_POST[$fields_labels_ar[$i]["name_field"]] = "";
}
// end if
$sql .= add_slashes($_POST[$fields_labels_ar[$i]["name_field"]]) . ", ";
// add the field value to the sql statement
break;
}
// end switch
}
// end if
elseif($fields_labels_ar[$i]["type_field"] == "insert_date" or $fields_labels_ar[$i]["type_field"] == "update_date") {
// if the field is not in the form but need to be inserted because it's an insert data or an update data
$sql .= add_slashes(date("Y-m-d H:i:s")) . ", ";
// add the field name to the sql statement
}
// end elseif
elseif($fields_labels_ar[$i]["type_field"] == "ID_user") {
// if the field is not in the form but need to be inserted because it's an ID_user
$sql .= add_slashes($current_user) . ", ";
// add the field name to the sql statement
}
// end elseif
elseif($fields_labels_ar[$i]["type_field"] == "unique_ID") {
// if the field is not in the form but need to be inserted because it's a password record
$pass = md5(uniqid(microtime(), 1)) . getmypid();
$sql .= add_slashes($pass) . ", ";
// add the field name to the sql statement
}
// end elseif
}
// end for
$sql = substr($sql, 0, (strlen($sql) - 2));
$sql .= ")";
// insert the record
$res_insert = execute_db($sql, $conn, 'business_logic.php');
}
// end function insert_record
// goal: build the where clause of a select sql statement e.g. "field_1 = 'value' AND field_2 LIKE '%value'"
// input: $_POST, $fields_labels_ar, $table_name
function build_where_clause($fields_labels_ar, $table_name) {
$where_clause = "";
if(isset($_POST["operator"]) and strtolower($_POST["operator"]) == 'or') {
$_POST["operator"] = 'OR';
}
else {
$_POST["operator"] = 'AND';
}
$count_temp = count($fields_labels_ar);
// build the where clause
for($i = 0; $i < $count_temp; $i++) {
$field_type_temp = $fields_labels_ar[$i]["type_field"];
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$field_separator_temp = $fields_labels_ar[$i]["separator_field"];
$field_select_type_temp = $fields_labels_ar[$i]["select_type_field"];
if($fields_labels_ar[$i]["present_search_form_field"] == "1") {
switch($field_type_temp) {
case "select_multiple":
case "select_multiple_checkbox":
if(isset($_POST[$field_name_temp])) {
$count_temp_2 = count($_POST[$field_name_temp]);
for($j = 0; $j < $count_temp_2; $j++) {
// for each possible check
if($_POST[$field_name_temp][$j] != "") {
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` LIKE '%" . add_slashes($field_separator_temp . $_POST[$field_name_temp][$j] . $field_separator_temp, 2) . "%'";
$where_clause .= " AND ";
}
// end if
}
// end for
$where_clause = substr($where_clause, 0, - 5);
// remove last ' AND '
$where_clause .= " " . $_POST["operator"] . " ";
}
// end if
break;
case "date":
case "insert_date":
case "update_date":
$select_type_field_name_temp = $field_name_temp . "_select_type";
if($_POST[$select_type_field_name_temp] != "") {
$year_field = $field_name_temp . "_year";
$month_field = $field_name_temp . "_month";
$day_field = $field_name_temp . "_day";
$mysql_date_value = $_POST[$year_field] . "-" . $_POST[$month_field] . "-" . $_POST[$day_field];
switch($_POST[$select_type_field_name_temp]) {
case "is_equal":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` = " . add_slashes($mysql_date_value);
break;
case "greater_than":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` > " . add_slashes($mysql_date_value);
break;
case "less_then":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` < " . add_slashes($mysql_date_value);
break;
}
// end switch
$where_clause .= " " . $_POST["operator"] . " ";
}
// end if
break;
default:
if($_POST[$field_name_temp] != "") {
// if the user has filled the field
$select_type_field_name_temp = $field_name_temp . "_select_type";
switch($_POST[$select_type_field_name_temp]) {
case "is_equal":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` = " . add_slashes($_POST[$field_name_temp]);
break;
case "contains":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` LIKE '%" . add_slashes($_POST[$field_name_temp], 2) . "%'";
break;
case "starts_with":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` LIKE '" . add_slashes($_POST[$field_name_temp], 2) . "%'";
break;
case "ends_with":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` LIKE '%" . add_slashes($_POST[$field_name_temp], 2) . "'";
break;
case "greater_than":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` > '" . add_slashes($_POST[$field_name_temp], 2) . "'";
break;
case "less_then":
$where_clause .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field_name_temp, 1) . "` < '" . add_slashes($_POST[$field_name_temp], 2) . "'";
break;
}
// end switch
$where_clause .= " " . $_POST["operator"] . " ";
}
// end if
break;
}
//end switch
}
// end if
}
// end for ($i=0; $i<count($fields_labels_ar); $i++)
if($where_clause !== '') {
$where_clause = substr($where_clause, 0, - (strlen($_POST["operator"]) + 2));
// delete the last " and " or " or "
}
// end if
return $where_clause;
}
// end function build_where_clause
// get the correct mode to display a field, according to its content (e.g. format data, display select multiple in different rows without separator and so on
// input: $field_value, $field_type, $field_content, $field_separator, $display_mode (results_table|details_page)
// output: $field_to_display, the field value ready to be displayed
// global: $word_wrap_col, the coloumn at which a string will be wrapped in the results
function get_field_correct_displaying($field_value, $field_type, $field_content, $field_separator, $display_mode) {
global $word_wrap_col, $enable_word_wrap_cut, $upload_relative_url, $table_name;
$field_to_display = "";
switch($field_type) {
case "generic_file":
if($field_value != '') {
$field_to_display = "<a href=\"" . $upload_relative_url . str_replace("%2F", "/", rawurlencode(substr($field_value, 18))) . "\">" . htmlspecialchars(substr($field_value, 18 + strlen($table_name) + 1)) . "</a>";
}
break;
case "image_file":
if($field_value != '') {
$field_to_display = "<img alt=\"none\" src=\"" . $upload_relative_url . str_replace("%2F", "/", rawurlencode(substr($field_value, 18))) . "\" />";
}
break;
case "select_multiple":
case "select_multiple_checkbox":
$field_value = htmlspecialchars($field_value);
$separator_first_check = stripos($field_value, $field_separator);
$separator_last_check = strripos($field_value, $field_separator);
if($separator_first_check == "0" and $separator_last_check == (strlen($field_value) - 1)) {
$field_value = substr($field_value, 1, - 1);
}
// delete the first and the last separator
$select_values_ar = explode($field_separator, $field_value);
$count_temp = count($select_values_ar);
for($i = 0; $i < $count_temp; $i++) {
if($display_mode == "results_table") {
$field_to_display .= nl2br(wordwrap($select_values_ar[$i], $word_wrap_col)) . "<br />";
}
else {
$field_to_display .= nl2br($select_values_ar[$i]) . "<br />";
}
}
// end for
break;
case "select_single":
$field_value = htmlspecialchars($field_value);
$separator_first_check = stripos($field_value, $field_separator);
$separator_last_check = strripos($field_value, $field_separator);
if($separator_first_check == 0 and $separator_last_check == (strlen($field_value) - 1)) {
$field_value = substr($field_value, 1, - 1);
}
// delete the first and the last separator
$field_to_display = $field_value;
break;
case "insert_date":
case "update_date":
case "date":
$field_value = htmlspecialchars($field_value);
if($field_value != '0000-00-00 00:00:00' && $field_value != '0000-00-00') {
$field_to_display = format_date($field_value);
}
// end if
else {
$field_to_display = "";
}
// end else
break;
case "rich_editor":
$field_to_display = $field_value;
break;
default:
// e.g. text, textarea and select sinlge
if($field_content !== 'html') {
$field_value = htmlspecialchars($field_value);
if($display_mode == "results_table") {
$displayed_part = wordwrap($field_value, $word_wrap_col, "\n", $enable_word_wrap_cut);
}
// end if
else {
$displayed_part = $field_value;
}
// end else
}
// end if
else {
$displayed_part = $field_value;
}
// end else
if($field_content == "email") {
$field_to_display = "<a href=\"mailto:" . $field_value . "\">" . $displayed_part . "</a>";
}
// end if
elseif($field_content == "url") {
$field_to_display = "<a href=\"" . $field_value . "\">" . $displayed_part . "</a>";
}
// end elseif
else {
$field_to_display = nl2br($displayed_part);
}
// end else
break;
}
// end switch
return $field_to_display;
}
// function get_field_correct_displaying
// get the correct mode to display a field in a csv, according to its content (e.g. format data, display select multiple in different rows without separator and so on
// input: $field_value, $field_type, $field_content, $field_separator
// output: $field_to_display, the field value ready to be displayed
function get_field_correct_csv_displaying($field_value, $field_type, $field_content, $field_separator) {
$field_to_display = "";
switch($field_type) {
case "select_multiple":
case "select_multiple_checkbox":
$separator_first_check = stripos($field_value, $field_separator);
$separator_last_check = strripos($field_value, $field_separator);
if($separator_first_check == "0" and $separator_last_check == (strlen($field_value) - 1)) {
$field_value = substr($field_value, 1, - 1);
}
// delete the first and the last separator
$select_values_ar = explode($field_separator, $field_value);
$count_temp = count($select_values_ar);
for($i = 0; $i < $count_temp; $i++) {
$field_to_display .= $select_values_ar[$i] . "\n";
}
// end for
break;
case "select_single":
$separator_first_check = stripos($field_value, $field_separator);
$separator_last_check = strripos($field_value, $field_separator);
if($separator_first_check == "0" and $separator_last_check == (strlen($field_value) - 1)) {
$field_value = substr($field_value, 1, - 1);
}
$field_to_display = $field_value;
break;
case "insert_date":
case "update_date":
case "date":
if($field_value != '0000-00-00 00:00:00' && $field_value != '0000-00-00') {
$field_to_display = format_date($field_value);
}
// end if
else {
$field_to_display = "";
}
// end else
break;
default:
$field_to_display = str_replace("\r", '', $field_value);
}
// end switch
return $field_to_display;
}
// end function get_field_correct_csv_displaying
function build_results_table($fields_labels_ar, $table_name, $res_records, $results_type, $name_mailing, $page, $action, $where_clause, $page, $order, $order_type) {
global $submit_buttons_ar, $normal_messages_ar, $edit_target_window, $delete_icon, $edit_icon, $details_icon, $enable_edit, $enable_insert, $enable_delete, $enable_details, $conn, $ask_confirmation_delete, $word_wrap_col, $word_wrap_fix_width, $alias_prefix, $dadabik_main_file, $dadabik_short_file, $popup_parameters;
if($action == "mail.php") {
$function = "check_form";
}
// end if
else {
$function = "search";
}
// end elseif
$unique_field_name = get_unique_field($table_name);
// build the results HTML table
///////////////////////////////
$results_table = "";
$results_table .= "<table summary=\"none\" class=\"results\">";
$results_table .= "<tr>";
$results_table .= "<th class=\"results\"> </td>";
// skip the first column for edit, delete and details
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["present_results_search_field"] == "1") {
// the user want to display the field in the basic search results page
$label_to_display = $fields_labels_ar[$i]["label_field"];
if($word_wrap_fix_width === 1) {
$spaces_to_add = $word_wrap_col - strlen($label_to_display);
if($spaces_to_add > 0) {
for($j = 0; $j < $spaces_to_add; $j++) {
$label_to_display .= ' ';
}
}
}
// end if
$results_table .= "<th class=\"results\">";
if($results_type == "search") {
if($order != $fields_labels_ar[$i]["name_field"]) {
// the results are not ordered by this field at the moment
$link_class = "order_link";
$new_order_type = "ASC";
}
else {
$link_class = "order_link_selected";
if($order_type == "DESC") {
$new_order_type = "ASC";
}
else {
$new_order_type = "DESC";
}
}
// end else if
$results_table .= "<a class=\"" . $link_class . "\" href=\"" . $action . "?table_name=" . rawurlencode($table_name) . "&function=" . $function . "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . $page . "&order=" . rawurlencode(enc($fields_labels_ar[$i]["name_field"])) . "&order_type=" . $new_order_type . "\">" . $label_to_display . "</a></th>";
// insert the linked name of the field in the <th>
}
else {
$results_table .= $label_to_display . "</th>";
// insert the name of the field in the <th>
}
// end if
}
// end if
}
// end for
$results_table .= "</tr>";
$td_results_class = 'results_1';
$td_controls_class = 'controls_1';
// build the table body
while($records_row = database_fetch_array($res_records)) {
if($td_results_class === 'results_1') {
$td_results_class = 'results_2';
$td_controls_class = 'controls_2';
}
// end if
else {
$td_results_class = 'results_1';
$td_controls_class = 'controls_1';
}
// end else
// set where clause for delete and update
///////////////////////////////////////////
if($unique_field_name != "") {
// exists a unique number
$where_field = $unique_field_name;
$where_value = $records_row[$unique_field_name];
}
// end if
///////////////////////////////////////////
// end build where clause for delete and update
$results_table .= "<tr>";
$results_table .= "<td class=\"" . $td_controls_class . "\">";
if($unique_field_name != "" and ($results_type == "search" or $results_type == "possible_duplication")) {
// exists a unique number: edit, delete, details make sense
if($enable_edit == "1") {
// display the edit icon
$results_table .= "<a class=\"onlyscreen\" href=\"";
if($edit_target_window == 'blank') {
$results_table .= $dadabik_short_file;
}
else {
$results_table .= $dadabik_main_file;
}
$results_table .= "?table_name=" . rawurlencode($table_name) . "&function=edit&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "\"";
if($edit_target_window == 'blank') {
$results_table .= " onclick=\"javascript:window.open('" . $dadabik_short_file . "?table_name=" . rawurlencode($table_name) . "&function=edit&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "', 'new','" . $popup_parameters . "'); return false;\"";
}
$results_table .= "><img style=\"border:0;\" src=\"" . $edit_icon . "\" alt=\"" . $submit_buttons_ar["edit"] . "\" title=\"" . $submit_buttons_ar["edit"] . "\" /></a>";
}
// end if
if($enable_delete == "1") {
// display the delete icon
$results_table .= "<a class=\"onlyscreen\"";
if($ask_confirmation_delete == 1 and $edit_target_window == 'self') {
$results_table .= " onclick=\"if (!confirm('" . str_replace('\'', '\\\'', $normal_messages_ar['confirm_delete?']) . "')){ return false;}\"";
}
$results_table .= " href=\"";
if($edit_target_window == 'blank') {
$results_table .= $dadabik_short_file;
}
else {
$results_table .= $dadabik_main_file;
}
$results_table .= "?table_name=" . rawurlencode($table_name) . "&function=delete";
if($results_type == "search") {
$results_table .= "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . $page . "&order=" . rawurlencode(enc($order)) . "&order_type=" . $order_type;
}
$results_table .= "&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "\"";
if($edit_target_window == 'blank') {
$results_table .= " onclick=\"javascript:return confipop('" . $dadabik_short_file . "?table_name=" . rawurlencode($table_name) . "&function=delete";
if($results_type == "search") {
$results_table .= "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . $page . "&order=" . rawurlencode(enc($order)) . "&order_type=" . $order_type;
}
$results_table .= "&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "')\"";
}
$results_table .= "><img style=\"border:0;\" src=\"" . $delete_icon . "\" alt=\"" . $submit_buttons_ar["delete"] . "\" title=\"" . $submit_buttons_ar["delete"] . "\" /></a>";
}
// end if
if($enable_details == "1") {
// display the details icon
$results_table .= "<a class=\"onlyscreen\" href=\"";
if($edit_target_window == 'blank') {
$results_table .= $dadabik_short_file;
}
else {
$results_table .= $dadabik_main_file;
}
$results_table .= "?table_name=" . rawurlencode($table_name) . "&function=details&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "\"";
if($edit_target_window == 'blank') {
$results_table .= " onclick=\"javascript:window.open('" . $dadabik_short_file . "?table_name=" . rawurlencode($table_name) . "&function=details&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "', 'new','" . $popup_parameters . "'); return false;\"";
}
$results_table .= "><img style=\"border:0;\" src=\"" . $details_icon . "\" alt=\"" . $submit_buttons_ar["details"] . "\" title=\"" . $submit_buttons_ar["details"] . "\" /></a>";
}
// end if
if($enable_details == "1" and $enable_insert == "1") {
// display the copy icon
$results_table .= "<a class=\"onlyscreen\" href=\"";
if($edit_target_window == 'blank') {
$results_table .= $dadabik_short_file;
}
else {
$results_table .= $dadabik_main_file;
}
$results_table .= "?table_name=" . rawurlencode($table_name) . "&function=copy&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "\"";
if($edit_target_window == 'blank') {
$results_table .= " onclick=\"javascript:window.open('" . $dadabik_short_file . "?table_name=" . rawurlencode($table_name) . "&function=copy&where_field=" . rawurlencode($where_field) . "&where_value=" . rawurlencode($where_value) . "', 'new','" . $popup_parameters . "'); return false;\"";
}
$results_table .= " title=\"" . $submit_buttons_ar["copy"] . "\">+<sup>+</sup></a>";
}
}
// end if
$results_table .= "</td>";
// start cells (2nd cell onwards) showing values
for($i = 0; $i < $count_temp; $i++) {
// the user want to display the field in the search results page
if($fields_labels_ar[$i]["present_results_search_field"] == "1") {
$results_table .= "<td class=\"" . $td_results_class . "\">";
// start the cell
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$field_type = $fields_labels_ar[$i]["type_field"];
$field_content = $fields_labels_ar[$i]["content_field"];
$field_separator = $fields_labels_ar[$i]["separator_field"];
$field_value = $records_row[$field_name_temp];
$field_to_display = get_field_correct_displaying($field_value, $field_type, $field_content, $field_separator, "results_table");
if($field_to_display == "") {
$field_to_display .= " ";
}
if(!empty($fields_labels_ar[$i]["primary_key_table_field"]) && !empty($fields_labels_ar[$i]["primary_key_field_field"]) && $fields_labels_ar[$i]["primary_key_field_field"] == $fields_labels_ar[$i]["linked_fields_field"]) {
$link = "<a href=\"" . ($edit_target_window == 'blank' ? $dadabik_short_file : $dadabik_main_file) . "?table_name=" . rawurlencode($fields_labels_ar[$i]["primary_key_table_field"]) . "&function=search&execute_search=1&where_field=" . rawurlencode($fields_labels_ar[$i]["primary_key_field_field"]) . "&where_value=" . rawurlencode($field_value) . "\"" . ($edit_target_window == 'blank' ? " onclick=\"javascript:window.open('" . $dadabik_short_file . "?table_name=" . rawurlencode($fields_labels_ar[$i]["primary_key_table_field"]) . "&function=search&execute_search=1&where_field=" . rawurlencode($fields_labels_ar[$i]["primary_key_field_field"]) . "&where_value=" . rawurlencode($field_value) . "', 'new','" . $popup_parameters . "'); return false;\"" : '') . ">";
}
$results_table .= isset($link) ? $link : '';
$results_table .= $field_to_display . " ";
$results_table = substr($results_table, 0, - 6);
// delete the last
$results_table .= (isset($link) ? '</a>' : '') . "</td>";
// end the cell
unset($link);
}
// end if the user want to display the field
}
// end for - start cells (2nd cell onwards) showing values
$results_table .= "</tr>";
}
// end while
$results_table .= "</table>";
return $results_table;
}
// end function build_results_table
// build a csv, starting from a recordset
// input: $res_record, the recordset, $fields_labels_ar
function build_csv($res_records, $fields_labels_ar) {
global $csv_separator, $alias_prefix;
$csv = "";
$count_temp = count($fields_labels_ar);
// write heading
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["present_results_search_field"] == "1") {
$csv .= "\"" . str_replace("\"", "\"\"", $fields_labels_ar[$i]["label_field"]) . "\"" . $csv_separator;
}
}
$csv = substr($csv, 0, - 1);
// delete the last ","
$csv .= "\n";
// write other rows
while($records_row = database_fetch_array($res_records)) {
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["present_results_search_field"] == "1") {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$field_type = $fields_labels_ar[$i]["type_field"];
$field_content = $fields_labels_ar[$i]["content_field"];
$field_separator = $fields_labels_ar[$i]["separator_field"];
$field_values_ar = array();
// reset the array containing values to display, otherwise for each loop I have the previous values
$primary_key_field_field = $fields_labels_ar[$i]["primary_key_field_field"];
if($primary_key_field_field != "") {
$primary_key_field_field = $fields_labels_ar[$i]["primary_key_field_field"];
$primary_key_table_field = $fields_labels_ar[$i]["primary_key_table_field"];
$primary_key_db_field = $fields_labels_ar[$i]["primary_key_db_field"];
$linked_fields_field = $fields_labels_ar[$i]["linked_fields_field"];
$linked_fields_ar = explode($fields_labels_ar[$i]["separator_field"], $linked_fields_field);
$alias_suffix_field = $fields_labels_ar[$i]["alias_suffix_field"];
for($j = 0; $j < count($linked_fields_ar); $j++) {
$field_values_ar[$j] .= $records_row[$linked_fields_ar[$j] . $alias_prefix . $alias_suffix_field];
}
// end for
//$field_values_ar = $linked_field_values_ar;
}
else {
$field_values_ar[0] = $records_row[$field_name_temp];
}
$csv .= "\"";
$count_temp_2 = count($field_values_ar);
for($j = 0; $j < $count_temp_2; $j++) {
$field_to_display = get_field_correct_csv_displaying($field_values_ar[$j], $field_type, $field_content, $field_separator);
$csv .= str_replace("\"", "\"\"", $field_to_display) . " ";
}
$csv = substr($csv, 0, - 1);
// delete the last space
$csv .= "\"" . $csv_separator;
}
}
// end for
$csv = substr($csv, 0, - 1);
// delete the last ","
$csv .= "\n";
}
return $csv;
}
// end function build_csv
// goal: build an html table with details of a record
// input: $fields_labels_ar $res_details (the result of the query)
// ouptut: $details_table, the html table
function build_details_table($fields_labels_ar, $res_details) {
global $conn, $alias_prefix, $edit_target_window, $dadabik_main_file, $dadabik_short_file, $popup_parameters;
// build the table
$details_table = "";
$details_table .= "<table summary=\"none\">";
while($details_row = database_fetch_array($res_details)) {
// should be just one
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
if($fields_labels_ar[$i]["present_details_form_field"] == "1") {
$field_name_temp = $fields_labels_ar[$i]["name_field"];
$field_value = $details_row[$field_name_temp];
$details_table .= "<tr><td class=\"td_label_details\"><b>" . $fields_labels_ar[$i]["label_field"] . "</b></td><td class=\"td_value_details\">";
if(!empty($fields_labels_ar[$i]["primary_key_table_field"]) && !empty($fields_labels_ar[$i]["primary_key_field_field"]) && $fields_labels_ar[$i]["primary_key_field_field"] == $fields_labels_ar[$i]["linked_fields_field"]) {
$link = "<a href=\"" . ($edit_target_window == 'blank' ? $dadabik_short_file : $dadabik_main_file) . "?table_name=" . rawurlencode($fields_labels_ar[$i]["primary_key_table_field"]) . "&function=details&execute_search=1&where_field=" . rawurlencode($fields_labels_ar[$i]["primary_key_field_field"]) . "&where_value=" . rawurlencode($field_value) . "\"" . ($edit_target_window == 'blank' ? " onclick=\"javascript:window.open('" . $dadabik_short_file . "?table_name=" . rawurlencode($fields_labels_ar[$i]["primary_key_table_field"]) . "&function=details&execute_search=1&where_field=" . rawurlencode($fields_labels_ar[$i]["primary_key_field_field"]) . "&where_value=" . rawurlencode($field_value) . "', 'new','" . $popup_parameters . "'); return false;\"" : '') . ">";
}
$details_table .= isset($link) ? $link : '';
$field_to_display = get_field_correct_displaying($field_value, $fields_labels_ar[$i]["type_field"], $fields_labels_ar[$i]["content_field"], $fields_labels_ar[$i]["separator_field"], "details_table");
// get the correct display mode for the field
$details_table .= $field_to_display . " ";
$details_table = substr($details_table, 0, - 6);
// delete the last
$details_table .= (isset($link) ? '</a>' : '') . "</td></tr>";
unset($link);
}
// end if
}
// end for
}
// end while
$details_table .= "</table>";
return $details_table;
}
// end function build_details_table
// goal: build a set of link to go forward and back in the result pages
// input: $where_clause, $pages_number (total number of pages), $page (the current page 0....n), $action, the action page (e.g. index.php or mail.php), $name_mailing, the name of the current mailing, $order, the field used to order the results
// output: $navigation_tool, the html navigation tool
function build_navigation_tool($where_clause, $pages_number, $page, $action, $name_mailing, $order, $order_type) {
global $table_name;
if($action == "mail.php") {
$function = "check_form";
}
// end if
else {
$function = "search";
}
// end elseif
$navigation_tool = "";
$page_group = (int)($page / 10);
// which group? (from 0......n) e.g. page 12 is in the page_group 1
$total_groups = ((int)(($pages_number - 1) / 10)) + 1;
// how many groups? e.g. with 32 pages 4 groups
$start_page = $page_group * 10;
// the navigation tool start with $start_page, end with $end_page
if($start_page + 10 > $pages_number) {
$end_page = $pages_number;
}
// end if
else {
$end_page = $start_page + 10;
}
// end else
if($page_group > 1) {
$navigation_tool .= "<a class=\"navig\" href=\"" . $action . "?&table_name=" . rawurlencode($table_name) . "&function=" . $function . "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=0&order=" . rawurlencode(enc($order)) . "&order_type=" . rawurlencode($order_type) . "\" title=\"1\"><<</a> ";
}
// end if
if($page_group > 0) {
$navigation_tool .= "<a class=\"navig\" href=\"" . $action . "?&table_name=" . rawurlencode($table_name) . "&function=" . $function . "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . ((($page_group - 1) * 10) + 9) . "&order=" . rawurlencode(enc($order)) . "&order_type=" . rawurlencode($order_type) . "\" title=\"" . ((($page_group - 1) * 10) + 10) . "\"><</a> ";
}
// end if
for($i = $start_page; $i < $end_page; $i++) {
if($i != $page) {
$navigation_tool .= "<a class=\"navig\" href=\"" . $action . "?&table_name=" . rawurlencode($table_name) . "&function=" . $function . "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . $i . "&order=" . rawurlencode(enc($order)) . "&order_type=" . rawurlencode($order_type) . "\">" . ($i + 1) . "</a> ";
}
// end if
else {
$navigation_tool .= "<span class=\"navig\">" . ($i + 1) . "</span> ";
}
//end else
}
// end for
if(($page_group + 1) < ($total_groups)) {
$navigation_tool .= "<a class=\"navig\" href=\"" . $action . "?&table_name=" . rawurlencode($table_name) . "&function=" . $function . "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . (($page_group + 1) * 10) . "&order=" . rawurlencode(enc($order)) . "&order_type=" . rawurlencode($order_type) . "\" title=\"" . ((($page_group + 1) * 10) + 1) . "\">></a> ";
}
// end elseif
if(($page_group + 1) < ($total_groups - 1)) {
$navigation_tool .= "<a class=\"navig\" href=\"" . $action . "?&table_name=" . rawurlencode($table_name) . "&function=" . $function . "&where_clause=" . rawurlencode(enc($where_clause)) . "&page=" . ($pages_number - 1) . "&order=" . rawurlencode(enc($order)) . "&order_type=" . rawurlencode($order_type) . "\" title=\"" . $pages_number . "\">>></a> ";
}
// end if
return $navigation_tool;
}
// end function build_navigation_tool
// goal: delete files uploaded with the one record being deleted
function delete_files_with_record($table_name, $where_field, $where_value) {
global $conn, $upload_directory;
$sql = "SELECT * FROM `" . add_slashes($table_name, 1) . "` WHERE `" . add_slashes($where_field, 1) . "` = " . add_slashes($where_value) . " LIMIT 1";
$row = database_fetch_row(execute_db($sql, $conn, 'business_logic.php'));
foreach($row as $key=>$value) {
if($value !== '' and strlen($value) > 19) {
// the 18 is because of the text tag - The filepath is - - that acts as an identifier that a file has been uploaded
$tag = substr($value, 0, 18);
$file_location = substr($value, 18);
if($tag === 'The filepath is - ') {
$files_to_delete[] = $file_location;
}
}
}
if(isset($files_to_delete) and count($files_to_delete) > 0) {
foreach($files_to_delete as $key=>$value) {
if(file_exists($upload_directory . $value)) {
unlink($upload_directory . $value);
}
}
}
}
// end function delete_files_with_record
// goal: delete one record
function delete_record($table_name, $where_field, $where_value) {
global $conn;
$sql = "DELETE FROM `" . add_slashes($table_name, 1) . "` WHERE `" . add_slashes($where_field, 1) . "` = " . add_slashes($where_value) . " LIMIT 1";
// execute the select query
$res_contacts = execute_db($sql, $conn, 'business_logic.php');
}
// end function delete_record
// goal: delete a group of record according to a where clause
// input: $table_name, $where_clause, $ID_user_field_name (if it is not false, delete only the records that the current user owns
// how - scan for files to delete first, then delete mysql
function delete_multiple_records($table_name, $where_clause, $ID_user_field_name) {
global $conn, $current_user, $enable_authentication, $enable_delete_authorization, $upload_directory;
if($enable_authentication === 1 && $enable_delete_authorization === 1 && $ID_user_field_name !== false) {
// check also the user
if($where_clause !== '') {
$where_clause .= ' AND ';
}
// end if
$where_clause .= '`' . add_slashes($ID_user_field_name, 1) . "` = " . add_slashes($current_user);
}
// end if
// get files to delete
$sql = '';
$sql = "SELECT * FROM `" . add_slashes($table_name, 1) . '`';
if($where_clause !== '') {
$sql .= " WHERE " . $where_clause;
}
// end if
$files_to_delete_with_records = array();
$results = execute_db($sql, $conn, 'business_logic.php');
$numofrows = database_num_rows($results);
for($i = 0; $i < $numofrows; $i++) {
$row = database_fetch_array($results);
foreach($row as $key=>$value) {
if(strlen($value) > 19) {
$tag = substr($value, 0, 18);
$file_location = substr($value, 18);
if($tag == "The filepath is - ") {
$files_to_delete_with_records[] = $file_location;
}
}
// end if
}
// end foreach
}
// end for
// delete mysql
$sql = '';
$sql .= "DELETE FROM `" . add_slashes($table_name, 1) . '`';
if($where_clause !== '') {
$sql .= " WHERE " . $where_clause;
}
// execute the select query
$res_contacts = execute_db($sql, $conn, 'business_logic.php');
// delete the files
foreach($files_to_delete_with_records as $key=>$value) {
if(file_exists($upload_directory . $value)) {
unlink($upload_directory . $value);
}
}
}
// end function delete_multiple_records
// goal: check if there are at least one required field
// input: $fields_labels_ar
// output: true or false
function required_field_present($fields_labels_ar) {
$i = 0;
$found = 0;
$count_temp = count($fields_labels_ar);
while($i < $count_temp && $found == 0) {
if($fields_labels_ar[$i]["required_field"] == "1") {
$found = 1;
}
$i++;
}
if($found == 1) {
return true;
}
else {
return false;
}
}
// end function required_field_present
// goal: drop (if present) the old internal table and create the new one.
// input: $table_internal_name
function create_internal_table($table_internal_name) {
global $conn;
// drop the old table
$sql = "DROP TABLE IF EXISTS `" . add_slashes($table_internal_name, 1) . '`';
$res_table = execute_db($sql, $conn, 'business_logic.php');
// create the new one
$sql = "CREATE TABLE `" . add_slashes($table_internal_name, 1) . "` (
name_field varchar(50) NOT NULL default '',
label_field varchar(255) NOT NULL default '',
type_field ENUM('text','textarea','rich_editor','password','insert_date','update_date','date','select_single','select_multiple','select_multiple_checkbox','generic_file','image_file','ID_user','unique_ID') NOT NULL default 'text',
content_field ENUM('alphabetic','alphanumeric','numeric','url','email','html','phone') NOT NULL DEFAULT 'alphanumeric',
present_search_form_field ENUM('0','1') DEFAULT '1' NOT NULL,
present_results_search_field ENUM('0','1') DEFAULT '1' NOT NULL,
present_details_form_field ENUM('0','1') DEFAULT '1' NOT NULL,
present_insert_form_field ENUM('0','1') DEFAULT '1' NOT NULL,
present_ext_update_form_field ENUM('0','1') DEFAULT '1' NOT NULL,
required_field ENUM('0','1') DEFAULT '0' NOT NULL,
check_duplicated_insert_field ENUM('0','1') DEFAULT '0' NOT NULL,
other_choices_field ENUM ('0','1') DEFAULT '0' NOT NULL,
select_options_field text NOT NULL default '',
primary_key_field_field VARCHAR(255) NOT NULL,
primary_key_table_field VARCHAR(255) NOT NULL,
primary_key_db_field VARCHAR(50) NOT NULL,
linked_fields_field TEXT NOT NULL,
linked_fields_order_by_field TEXT NOT NULL,
linked_fields_order_type_field VARCHAR(255) NOT NULL,
linked_fields_extra_mysql VARCHAR(255) NOT NULL,
select_type_field varchar(100) NOT NULL default 'is_equal/contains/starts_with/ends_with/greater_than/less_then',
prefix_field TEXT NOT NULL default '',
default_value_field TEXT NOT NULL default '',
width_field VARCHAR(5) NOT NULL,
height_field VARCHAR(5) NOT NULL,
maxlength_field VARCHAR(5) NOT NULL default '100',
hint_insert_field VARCHAR(255) NOT NULL,
order_form_field smallint(6) NOT NULL,
separator_field varchar(2) NOT NULL default '~',
PRIMARY KEY (name_field)
)
";
$res_table = execute_db($sql, $conn, 'business_logic.php');
}
// end function create_internal_table
// goal: drop (if present) the old table list and create the new one.
function create_table_list_table() {
global $conn, $table_list_name, $users_table_name;
// drop the old table
$sql = "DROP TABLE IF EXISTS `" . add_slashes($table_list_name, 1) . '`';
$res_table = execute_db($sql, $conn, 'business_logic.php');
// create the new one
$sql = "CREATE TABLE `" . add_slashes($table_list_name) . "` (
name_table varchar(255) NOT NULL default '',
allowed_table tinyint(4) NOT NULL default '0',
enable_insert_table varchar(5) NOT NULL default '',
enable_edit_table varchar(5) NOT NULL default '',
enable_delete_table varchar(5) NOT NULL default '',
enable_details_table varchar(5) NOT NULL default '',
PRIMARY KEY (name_table)
)
";
$res_table = execute_db($sql, $conn, 'business_logic.php');
}
// end function create_table_list_table
// goal: drop (if present) the old users table and create the new one.
function create_users_table() {
global $conn, $users_table_name;
// drop the old table
$sql = "DROP TABLE IF EXISTS `" . add_slashes($users_table_name, 1) . '`';
$res_table = execute_db($sql, $conn, 'business_logic.php');
// create the new one
$sql = "CREATE TABLE `" . add_slashes($users_table_name, 1) . "` (
ID_user int(10) unsigned NOT NULL auto_increment,
user_type_user varchar(50) NOT NULL,
username_user varchar(50) NOT NULL,
password_user varchar(32) NOT NULL,
PRIMARY KEY (ID_user),
UNIQUE (username_user)
)
";
$res_table = execute_db($sql, $conn, 'business_logic.php');
$sql = "INSERT INTO `" . add_slashes($users_table_name, 1) . "` (user_type_user, username_user, password_user) VALUES ('admin', 'root', '" . md5('letizia') . "')";
$res_table = execute_db($sql, $conn, 'business_logic.php');
}
// end function create_users_table
// goal: check if a table is allowed to be managed by DaDaBIK
// input: $table_name
// output: true or false
function table_allowed($table_name) {
global $conn, $table_list_name;
if(table_exists($table_list_name)) {
$sql = "SELECT `allowed_table` FROM `" . add_slashes($table_list_name, 1) . "` WHERE `name_table` = " . add_slashes($table_name);
$res_allowed = execute_db($sql, $conn, 'business_logic.php');
if(database_num_rows($res_allowed) == 1) {
$row_allowed = database_fetch_array($res_allowed);
$allowed_table = $row_allowed[0];
if($allowed_table == "0") {
return false;
}
// end if
else {
return true;
}
// end else
}
// end if
elseif(database_num_rows($res_allowed) == 0) {
// e.g. I have an empty table or the table is not installed
return false;
}
// end elseif
else {
exit;
}
// end else
}
// end if
else {
return false;
}
// end else
}
// end function table_allowed()
// goal: build an array containing "0" or "1" according to the fact that a feature (insert, edit, delete, details) is enabled or not
// input: $table_name
// output: $enabled_features_ar, the array
function build_enabled_features_ar($table_name) {
global $conn, $table_list_name;
$sql = "SELECT `enable_insert_table`, `enable_edit_table`, `enable_delete_table`, `enable_details_table` FROM `" . add_slashes($table_list_name, 1) . "` WHERE `name_table` = " . add_slashes($table_name);
$res_enable = execute_db($sql, $conn, 'business_logic.php');
if(database_num_rows($res_enable) == 1) {
$row_enable = database_fetch_array($res_enable);
$enabled_features_ar["insert"] = $row_enable["enable_insert_table"];
$enabled_features_ar["edit"] = $row_enable["enable_edit_table"];
$enabled_features_ar["delete"] = $row_enable["enable_delete_table"];
$enabled_features_ar["details"] = $row_enable["enable_details_table"];
return $enabled_features_ar;
}
}
// end function build_enabled_features_ar($table_name)
// goal: build the form that enable features
// input: name of the current table
// output: the html for the checkboxes
function build_enable_features_checkboxes($table_name) {
$enabled_features_ar = build_enabled_features_ar($table_name);
$enable_features_checkboxes = "";
$enable_features_checkboxes .= "<input type=\"checkbox\" name=\"enable_insert\" id=\"enable_insert\" value=\"1\"";
$enable_features_checkboxes .= "";
if($enabled_features_ar["insert"] == "1") {
$enable_features_checkboxes .= "checked=\"checked\"";
}
// end if
$enable_features_checkboxes .= ">Insert ";
$enable_features_checkboxes .= "<input type=\"checkbox\" name=\"enable_edit\" id=\"enable_edit\" value=\"1\"";
if($enabled_features_ar["edit"] == "1") {
$enable_features_checkboxes .= "checked=\"checked\"";
}
// end if
$enable_features_checkboxes .= ">Edit ";
$enable_features_checkboxes .= "<input type=\"checkbox\" name=\"enable_delete\" id=\"enable_delete\" value=\"1\"";
if($enabled_features_ar["delete"] == "1") {
$enable_features_checkboxes .= "checked=\"checked\"";
}
// end if
$enable_features_checkboxes .= ">Delete ";
$enable_features_checkboxes .= "<input type=\"checkbox\" name=\"enable_details\" id=\"enable_details\" value=\"1\"";
if($enabled_features_ar["details"] == "1") {
$enable_features_checkboxes .= "checked=\"checked\"";
}
// end if
$enable_features_checkboxes .= " />Details ";
return $enable_features_checkboxes;
}
// end function build_enable_features_checkboxes
// goal: build an html select with all the field names
// input: $fields_labels_ar, $field_position (the current selected option)
// output: the select
function build_change_field_select($fields_labels_ar, $field_position) {
global $conn, $table_name;
$change_field_select = "";
$change_field_select .= "<select name=\"field_position\" id=\"field_position\">";
$count_temp = count($fields_labels_ar);
for($i = 0; $i < $count_temp; $i++) {
$change_field_select .= "<option value=\"" . $i . "\"";
if($i == $field_position) {
$change_field_select .= " selected=\"selected\"";
}
// end if
$change_field_select .= ">" . htmlspecialchars($fields_labels_ar[$i]["name_field"]) . "</option>";
}
// end for
$change_field_select .= "</select>";
return $change_field_select;
}
// end function build_change_field_select
// goal: build a part of the internal table manager form relative to one field
// input: $field_position, the position of the field in the internal form, $int_field_ar, the array of the field of the internal table (with labels and properties), $fields_labels_ar, the array containing the fields labels and other information about fields
// output: the html form part
function build_int_table_field_form($field_position, $int_fields_ar, $fields_labels_ar) {
$int_table_form = "";
$int_table_form .= "<table summary=\"none\" border=\"0\" cellpadding=\"6\"><tr style=\"background-color:#F0F0F0;\"><td><table>";
$count_temp = count($int_fields_ar);
for($i = 0; $i < $count_temp; $i++) {
$int_table_form .= "<tr>";
$int_field_name_temp = $int_fields_ar[$i][1];
$int_table_form .= "<td>" . htmlspecialchars($int_fields_ar[$i][0]) . "</td><td>";
if($i == 0) {
// it's the name of the field, no edit needed, just show the name
$int_table_form .= $fields_labels_ar[$field_position][$int_field_name_temp];
}
// end if
else {
switch($int_fields_ar[$i][2]) {
case "text":
$int_table_form .= "<input type=\"text\" name=\"" . htmlspecialchars($int_field_name_temp) . "_" . $field_position . "\" id=\"" . htmlspecialchars($int_field_name_temp) . "_" . $field_position . "\" value=\"" . htmlspecialchars($fields_labels_ar[$field_position][$int_field_name_temp]) . "\" size=\"" . $int_fields_ar[$i][3] . "\" />";
break;
case "select_yn":
$int_table_form .= "<select name=\"" . htmlspecialchars($int_field_name_temp) . "_" . $field_position . "\" id=\"" . htmlspecialchars($int_field_name_temp) . "_" . $field_position . "\">";
$int_table_form .= "<option value=\"1\"";
if($fields_labels_ar[$field_position][$int_field_name_temp] == "1") {
$int_table_form .= " selected=\"selected\"";
}
// end if
$int_table_form .= ">Y</option>";
$int_table_form .= "<option value=\"0\"";
if($fields_labels_ar[$field_position][$int_field_name_temp] == "0") {
$int_table_form .= " selected=\"selected\"";
}
// end if
$int_table_form .= ">N</option>";
$int_table_form .= "</select>";
break;
case "select_custom":
$int_table_form .= "<select name=\"" . htmlspecialchars($int_field_name_temp) . "_" . $field_position . "\" id=\"" . htmlspecialchars($int_field_name_temp) . "_" . $field_position . "\">";
$temp_ar = explode("/", $int_fields_ar[$i][3]);
$count_temp_2 = count($temp_ar);
for($j = 0; $j < $count_temp_2; $j++) {
$int_table_form .= "<option value=\"" . htmlspecialchars($temp_ar[$j]) . "\"";
if($fields_labels_ar[$field_position][$int_field_name_temp] == $temp_ar[$j]) {
$int_table_form .= " selected=\"selected\"";
}
// end if
$int_table_form .= ">" . htmlspecialchars($temp_ar[$j]) . "</option>";
}
// end for
$int_table_form .= "</select>";
break;
}
// end switch
}
// end else
$int_table_form .= "</td>";
$int_table_form .= "</tr>";
// end of the row
}
// end for
$int_table_form .= "</table></td></tr></table>";
// end of the row
return $int_table_form;
}
// end function build_int_table_field_form($field_position, $int_fields_ar, $fields_labels_ar)
// goal: get a valid name (not already existant) for an uploaded file, e.g. if I upload a file with the name file.txt, and a file with the same name already exists, return file_2.txt, or file_3.txt.....; if .$check_temp_files is 1 check also the dadabik_tmp_file_ corresponding file names
// input: $file_name, $check_temp_files
// a valid name
function get_valid_name_uploaded_file($file_name, $check_temp_files) {
global $upload_directory, $table_name;
// START make table-specific upload directory
$upload_directory2 = $upload_directory . $table_name . '/';
if(!file_exists($upload_directory2)) {
mkdir($upload_directory2);
}
if(file_exists($upload_directory2) and !is_dir($upload_directory2)) {
unlink($upload_directory2);
mkdir($upload_directory2);
}
$uploaded_file_names_count = 0;
// END make table-specific upload directory
$valid_file_name = $file_name;
$valid_name_found = 0;
$dot_position = strpos($file_name, '.');
$i = 2;
do {
if(file_exists($upload_directory2 . $valid_file_name) || file_exists($upload_directory2 . 'dadabik_tmp_file_' . $valid_file_name) && $check_temp_files === 1) {
// a file with the same name is already present or a temporary file that will get the same name when the insert/update function will be executed is already present (and I need to check temp files)
if($dot_position === false) {
// the file doesn't have an exension
$valid_file_name = $file_name . '_' . $i;
// from pluto to pluto_2
}
else {
$valid_file_name = substr($file_name, 0, $dot_position) . '_' . $i . substr($file_name, $dot_position);
// from pluto.txt to pluto_2.txt
}
$i++;
}
// end if
else {
$valid_name_found = 1;
}
}
while($valid_name_found == 0);
return $valid_file_name;
}
// end function get_valid_name_uploaded_file ($file_name)
// goal: insert in the primary key table the other.... field
// input: $primary_key_table, $primary_key_db, $linked_fields, $field_value_other
// outpu: the ID of the record inserted
function insert_other_field($primary_key_db, $primary_key_table, $field_name, $field_value_other) {
global $conn;
if(!table_contains($primary_key_db, $primary_key_table, $field_name, $field_value_other)) {
// check if the table doesn't contains the value inserted as other
$sql_insert_other = "INSERT INTO `" . add_slashes($primary_key_table, 1) . "` (`" . add_slashes($field_name, 1) . "`) VALUES (" . add_slashes($field_value_other) . ")";
if($primary_key_db != "") {
choose_db($primary_key_db, $conn);
}
$res_insert = execute_db($sql_insert_other, $conn, 'business_logic.php');
// reselect the old db
if($primary_key_db != "") {
choose_db($primary_key_db, $conn);
}
return database_insert_id();
}
}
// end function insert_other_field($foreign_key, $field_value_other)
// goal: upate the options of a field when a user select other....
// input: $fields_labels_ar_i (fields_labels_ar specific for a field), $field_name, $field_value_other
function udpate_options($fields_labels_ar_i, $field_name, $field_value_other) {
global $conn, $table_internal_name;
$select_options_field_updated = $fields_labels_ar_i["select_options_field"] . $field_value_other . $fields_labels_ar_i["separator_field"];
$sql_update_other = "UPDATE `" . add_slashes($table_internal_name, 1) . "` SET `select_options_field` = " . add_slashes($select_options_field_updated) . " WHERE `name_field` = " . add_slashes($field_name);
$res_update = execute_db($sql_update_other, $conn, 'business_logic.php');
}
// end function udpate_options($fields_labels_ar_i, $field_name, $field_value_other)
// goal: build the array containing the linked field values starting from a field value
// input: $primary_key_field_field, $primary_key_table_field, $primary_key_db_field, $linked_fields_ar
// output: linked_field_values_ar
function build_linked_field_values_ar($field_value, $primary_key_field_field, $primary_key_table_field, $primary_key_db_field, $linked_fields_ar) {
global $conn;
$sql = "SELECT ";
$count_temp = count($linked_fields_ar);
for($i = 0; $i < $count_temp; $i++) {
$sql .= '`' . add_slashes($linked_fields_ar[$i], 1) . ", ";
}
$sql = substr($sql, 0, - 2);
$sql .= " FROM `" . add_slashes($primary_key_table_field, 1) . "` WHERE `" . add_slashes($primary_key_field_field, 1) . "` = " . add_slashes($field_value);
$res_linked_fields = execute_db($sql, $conn, 'business_logic.php');
$row_linked_fields = database_fetch_array($res_linked_fields);
$count_temp = database_num_fields($res_linked_fields);
for($i = 0; $i < $count_temp; $i++) {
$linked_field_values_ar[] = $row_linked_fields[$i];
}
return $linked_field_values_ar;
}
// end function build_linked_field_values_ar()
// goal: build the select part of a search query e.g.SELECT table_1.field_1, table_2.field2 from table_1 LEFT JOIN table_2 ON table_1.field_3 = table2.field_3
// input: $fields_labels_ar, $table_name
// output: the query
function build_select_part($fields_labels_ar, $table_name) {
global $alias_prefix;
// get the primary key
$unique_field_name = get_unique_field($table_name);
$sql_fields_part = '';
$sql_from_part = '';
foreach($fields_labels_ar as $field) {
if($field['present_results_search_field'] === '1' || $field['present_details_form_field'] === '1' || $field['name_field'] === $unique_field_name) {
// include in the select stataments just the fields present in results or the primary key (useful to pass to the edit form)
$sql_fields_part .= '`' . add_slashes($table_name, 1) . '`.`' . add_slashes($field['name_field'], 1) . '`, ';
}
}
$sql_fields_part = substr($sql_fields_part, 0, - 2);
$sql = "SELECT " . $sql_fields_part . " FROM `" . add_slashes($table_name, 1) . '` ' . $sql_from_part;
return $sql;
}