Page 1 of 1

dollar ($) signs missing on new records

PostPosted: Thu Sep 29, 2011 8:26 am
by jimr451
Hi,

I have a strange problem. I have a table "A" with a "relationship" set up to table "B" (1 to many).

So when editing a record in table "A", there's a tab that shows the related records in "B", and you can edit / add new records in table "B". Works as expected.

I also have a separate menu option allowing you to edit / add records to "B" directly, pretty plain vanilla.

Now, the issue. There's a text field in table "B" - that often has $ values in it - like "$1 off XYZ" etc. When you add a new record from the sub-tab noted above, the $ gets dropped. The record is saved perfectly otherwise. If you edit the record and add back the $, it keeps, and all it well.

If you add a new record to "B" using the "side menu" option noted above, the $ keeps just fine. Note that all $ seem to get wiped out when the bug occurs.

If someone can point me to a spot in the code where I can start looking, I don't mind debugging the code myself. I'm on the latest 1.3 release.

-Jim

Re: dollar ($) signs missing on new records

PostPosted: Wed Oct 19, 2011 1:14 pm
by jimr451
I debugged this and figured out where the problem occurs:

In Relationship.php, around line 1186:

Code: Select all
$table_cols[$table][$field] = ( is_scalar(@$vals[$label]) and $record !== null  and !preg_match('/(blob|binary)/', strtolower($fieldArr['Type'])) ) ? $record->parseString(@$vals[$label]) : @$vals[$label];


This calls parseString in Record.php (around line 306)

In that function, the string is searched for "$" variables for substitution. This is what is taking out the $ in the string on insert.

I put in an awful workaround because I wasn't sure what else relied on this code.

-Jim

Re: dollar ($) signs missing on new records

PostPosted: Wed Oct 19, 2011 1:19 pm
by shannah
Yes... this is some of the magic code that allows relationships to work. Looks like I need to look at this closely find out why it isn't escaping the literal $xyz strings properly so they aren't treated like wildcards.