Reply to thread

Steps:

  1. Create new resource with 1 custom field inputed
  2. Save
  3. SELECT * FROM `xf_resource_field_value` WHERE `resource_id` = <new resource ID>

Expected result: 1 record found.

Actual result: 0 records found.


I have tracked this down and it turned out XenResource_DataWriter_Resource::updateCustomFields ran twice.


Stack trace #1

[code]#0  XenResource_DataWriter_Resource->updateCustomFields() called at [/xf/library/XenResource/DataWriter/Resource.php:385]

#1  XenResource_DataWriter_Resource->_postSave() called at [/xf/library/XenForo/DataWriter.php:1397]

#2  XenForo_DataWriter->save() called at [/xf/library/xxx.php:164]

#3  xxx

#4  xxx

#5  XenForo_FrontController->dispatch(XenForo_RouteMatch Object ([_modifiedRoutePath] => ,[] => html,[] => XenForo_ControllerAdmin_Import,[] => resources/from-tsv,[] => importExternalData,[] => )) called at [/xf/library/XenForo/FrontController.php:134]

#6  XenForo_FrontController->run() called at [/xf/admin.php:13][/code]


Stack trace #2

[code]#0  XenResource_DataWriter_Resource->updateCustomFields() called at [/xf/library/XenResource/DataWriter/Resource.php:385]

#1  XenResource_DataWriter_Resource->_postSave() called at [/xf/library/XenForo/DataWriter.php:1397]

#2  XenForo_DataWriter->save() called at [/xf/library/XenResource/DataWriter/Version.php:224]

#3  XenResource_DataWriter_Version->_postSave() called at [/xf/library/XenForo/DataWriter.php:1397]

#4  XenForo_DataWriter->save() called at [/xf/library/XenResource/DataWriter/Resource.php:477]

#5  XenResource_DataWriter_Resource->_postSave() called at [/xf/library/XenForo/DataWriter.php:1397]

#6  XenForo_DataWriter->save() called at [/xf/library/xxx.php:164]

#7  xxx

#8  xxx

#9  XenForo_FrontController->dispatch(XenForo_RouteMatch Object ([_modifiedRoutePath] => ,[] => html,[] => XenForo_ControllerAdmin_Import,[] => resources/from-tsv,[] => importExternalData,[] => )) called at [/xf/library/XenForo/FrontController.php:134]

#10 XenForo_FrontController->run() called at [/xf/admin.php:13][/code]


The bug exists because of these snippets of code within XenResource_DataWriter_Resource

[php]

protected $_updateCustomFields = array();


...


    public function updateCustomFields()

    {

        if (is_array($this->_updateCustomFields))

        {

            ...


            $this->_db->query('DELETE FROM xf_resource_field_value WHERE resource_id = ?', $resourceId);


            ...

        }

    }

[/php]


$this->_updateCustomFields is an array from the beginning and in the second run of updateCustomFields, it clears all records before adding... nothing.


Back
Top Bottom