Bug found when show_record_tree is enabled with FCKEditor
Archived from the Xataface Users forum.
kevinwen — Mon Apr 12, 2010 11:36 am
I found a bug when show_record_tree is enabled with FCKEditor in use. The problem is $record->toJS() just outputs whatever stored in the database without using the html entities for special characters like “<”, “<script”, “</script>”, etc. When the “</script>” tag is included in the data, the “Code Barf” happens like the following screenshot:
The bug exists in RecordNavMenu.html at line 176:
- Code: Select all
document.recordIndex['{$record->getId()}'] = {$record->toJS()};
Can some body fix this problem so I don’t have disable the show_record_tree functionality? Thanks.
shannah — Tue Apr 13, 2010 9:31 am
What version of xataface are you using?
kevinwen — Tue Apr 13, 2010 5:35 pm
1.2.2 1616
shannah — Wed Apr 14, 2010 10:43 am
OK.. I have fixed this in SVN. Here is the diff for this particular fix:
- Code: Select all
stevepbook:xataface shannah$ svn diff -r 1789:1790 Index: Dataface/Record.php =================================================================== --- Dataface/Record.php (revision 1789) +++ Dataface/Record.php (revision 1790) @@ -2661,19 +2661,19 @@ $out = array(); foreach ( $strvals as $key=>$val){ if ( $this->checkPermission('view', array('field'=>$key)) ){ - if ( $this->_table->isInt($key) or $this->_table->isFloat($key) ){ - $out[] = "'{$key}': ".($val ? $val : 'null'); - } else { - - $out[] = "'{$key}': '".str_replace("\n","\\n",str_replace("\r","",addslashes($val)))."'"; - } + $out[$key] = $val; + } } - $out[] = "'__title__': '".addslashes($this->getTitle())."'"; - $out[] = "'__url__': '".addslashes($this->getURL())."'"; - $out[] = "'__expandable__': ".($this->checkPermission('expandable')?1:0); + $out['__title__'] = $this->getTitle(); + //$out[] = "'__title__': '".addslashes($this->getTitle())."'"; + $out['__url__'] = $this->getURL(); + //$out[] = "'__url__': '".addslashes($this->getURL())."'"; + $out['__expandable'] = ($this->checkPermission('expandable')?1:0); + //$out[] = "'__expandable__': ".($this->checkPermission('expandable')?1:0); - return '{'.implode(',',$out).'}'; + return json_encode($out); + //return '{'.implode(',',$out).'}';