error code : 1305 is specific to mysql when it does not recognise a function., in this case, "ifnull". you should probably upgrade your mysql version.
26 11/13/2013 09:29:30 pm
Re: Receipts and Remittance Error (4 replies, posted in Accounts Receivable)
27 11/13/2013 09:08:44 pm
Re: Front Accounting Skin (2 replies, posted in Jobs wanted/offered, non-free offers)
the following link contains some theme:
https://frontaccounting.com/wbt/pages/download/download-themes.php
if you want to create your own theme, it's quiet easy
28 11/13/2013 09:01:30 pm
Re: IDE /Debugger to use (2 replies, posted in FA Modifications)
there is a lot of (free) tools available: Aptana studio (An eclipse based IDE), Komodo Edit. i personnaly use Netbeans as an IDE and xdebug for debugging. it's also a good idea to turn on the $go_debug variable in the config.php, to see error messages. you'll need sometimes to turn off javascript in your browser.
29 11/13/2013 08:53:39 pm
Re: Renaming/Removing some Menu Items (3 replies, posted in FA Modifications)
well, the easist and the fastest way for doi it is to edit the customers.php under the applications folder.
you just have to modify the $label variable for the menu item you want to change.
add_lapp_function($level, $label, $link = "", $access = 'SA_OPEN', $category = '') or add_rapp_function($level, $label, $link = "", $access = 'SA_OPEN', $category = '') : lapp/rapp (stands for [b] left/right [/b] application)
as for the menu title in the main menu, you need to change, the $name variable ("ordres" to whatever is your need)
$this->application("orders", _($this->help_context = "&Sales"));
keep in mind that if you change the displayed text directly in the source code, you wont be able to use any translation for it, you'll need to do some customization to you .po file.
30 11/13/2013 03:28:39 pm
Re: mysqli usage (17 replies, posted in FA Modifications)
you sure have a point. but actually i was just reading FA's code so i can figured out how things are working.
i intend to use FA as an ERP in my company and i certainly will need to do some heavy costumization, and yes i might choose a more advanced orm.
the example i posted was made in 15 min (not my best shot).
Anyway, i'll share the code once it's made and fully tested.
thanx
31 11/13/2013 11:57:04 am
Topic: mysqli usage (17 replies, posted in FA Modifications)
hello yall,
i was wondering why FA keeps using mysql_connect and other old functions, the $godebug=1 keeps reminding me that these fucntions are indeed deprecated and will be no longer supported by future php release?!!
At the same time i had a look at webERP source code which actually support mysqli, mariadb and even postrgres.
Anyway, i rewrited connect_db.inc, 15 min of work, i even borrowed the DB_escape_string() (thanks guys) from webERP, and FA works just fine. well here's the code, feel free to try it or modify it and i'll be very glad if you have any suggestions/comments or improvements ...
<?php
function set_global_connection($company = -1) {
global $db, $transaction_level, $db_connections;
cancel_transaction(); // cancel all aborted transactions if any
$transaction_level = 0;
if ($company == -1)
$company = $_SESSION["wa_current_user"]->company;
$_SESSION["wa_current_user"]->cur_con = $company;
$connection = $db_connections[$company];
$db = mysqli_connect($connection["host"], $connection["dbuser"], $connection["dbpassword"]);
mysqli_select_db($db, $connection["dbname"]);
return $db;
}
$db_duplicate_error_code = 1062;
//DB wrapper functions to change only once for whole application
function db_query($sql, $err_msg = null) {
global $db, $show_sql, $sql_trail, $select_trail, $go_debug, $sql_queries, $Ajax,
$db_connections, $db_last_inserted_id;
// set current db prefix
$cur_prefix = $db_connections[$_SESSION["wa_current_user"]->cur_con]['tbpref'];
$sql = str_replace(TB_PREF, $cur_prefix, $sql);
if ($show_sql) {
$Ajax->activate('footer_debug');
$sql_queries .= "<pre>$sql</pre>\n<hr>";
}
//$result = mysql_query($sql, $db);
$result = mysqli_query($db, $sql);
if ($sql_trail) {
$db_last_inserted_id = mysql_insert_id($db); // preserve in case trail insert is done
if ($select_trail || (strstr($sql, 'SELECT') === false)) {
mysqli_query($db, "INSERT INTO " . $cur_prefix . "sql_trail
(`sql`, `result`, `msg`)
VALUES(" . db_escape($sql) . "," . ($result ? 1 : 0) . ",
" . db_escape($err_msg) . ")");
}
}
if ($err_msg != null || $go_debug) {
$exit = $err_msg != null;
if (function_exists('xdebug_call_file'))
check_db_error('<br>At file ' . xdebug_call_file() . ':' . xdebug_call_line() . ':<br>' . $err_msg, $sql, $exit);
else
check_db_error($err_msg, $sql, $exit);
}
return $result;
}
function db_fetch_row($result) {
return mysqli_fetch_row($result);
}
function db_fetch_assoc($result) {
return mysqli_fetch_assoc($result);
}
function db_fetch($result) {
return mysqli_fetch_array($result);
}
function db_seek(&$result, $record) {
return mysqli_data_seek($result, $record);
}
function db_free_result($result) {
if ($result)
mysqli_free_result($result);
}
function db_num_rows($result) {
return mysqli_num_rows($result);
}
function db_num_fields($result) {
return mysqli_num_fields($result);
}
function db_escape($value = "", $nullify = false) {
$value = @html_entity_decode($value, ENT_QUOTES, $_SESSION['language']->encoding);
$value = @htmlspecialchars($value, ENT_QUOTES, $_SESSION['language']->encoding);
//reset default if second parameter is skipped
$nullify = ($nullify === null) ? (false) : ($nullify);
//check for null/unset/empty strings
if ((!isset($value)) || (is_null($value)) || ($value === "")) {
$value = ($nullify) ? ("NULL") : ("''");
} else {
if (is_string($value)) {
//value is a string and should be quoted; determine best method based on available extensions
if (function_exists('mysql_real_escape_string')) {
$value = "'" . DB_escape_string($value) . "'";
} else {
$value = "'" . DB_escape_string($value) . "'";
}
} else if (!is_numeric($value)) {
//value is not a string nor numeric
display_error("ERROR: incorrect data type send to sql query");
echo '<br><br>';
exit();
}
}
return $value;
}
function db_error_no() {
global $db;
return mysqli_connect_errno();
}
function db_error_msg($conn) {
return mysqli_error($conn);
}
function db_insert_id() {
global $db_last_inserted_id, $sql_trail, $db;
return $sql_trail ? $db_last_inserted_id : mysqli_insert_id($db);
}
function db_num_affected_rows() {
global $db;
return mysqli_affected_rows($db);
}
function db_field_name($result, $n) {
return mysqli_field_name($result, $n);
}
function db_create_db($connection) {
$db = mysqli_connect($connection["host"], $connection["dbuser"], $connection["dbpassword"]);
if (!mysqli_select_db($db, $connection["dbname"])) {
$sql = "CREATE DATABASE IF NOT EXISTS " . $connection["dbname"] . "";
if (!mysqli_query($db, $sql) || !mysqli_select_db($db, $connection["dbname"]))
return 0;
}
return $db;
}
function db_drop_db($connection) {
if ($connection["tbpref"] == "") {
$sql = "DROP DATABASE IF EXISTS " . $connection["dbname"] . "";
return mysqli_query($db, $sql);
} else {
$res = db_query("show table status");
$all_tables = array();
while ($row = db_fetch($res))
$all_tables[] = $row;
// get table structures
foreach ($all_tables as $table) {
if (strpos($table['Name'], $connection["tbpref"]) === 0) {
db_query("DROP TABLE `" . $table['Name'] . "`");
}
}
//deleting the tables, how??
return true;
}
}
function db_close($dbase = null) {
global $db;
if (!$dbase)
$dbase = $db;
return mysqli_close($dbase);
}
function DB_escape_string($String) {
global $db;
return mysqli_real_escape_string($db, htmlspecialchars($String, ENT_COMPAT, 'utf-8', false));
}
?>