Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TimeStampable behaviour failure at setUpdatedAt(time()) #786

Open
murraycollingwood opened this issue Oct 30, 2013 · 0 comments
Open

TimeStampable behaviour failure at setUpdatedAt(time()) #786

murraycollingwood opened this issue Oct 30, 2013 · 0 comments

Comments

@murraycollingwood
Copy link

I have a table where I'm using timestampable behaviour - this is in the schema.xml

  <behavior name="timestampable"></behavior>

The table contains user records and we have the fields below defined in the structure:
created_at datetime Yes NULL
updated_at datetime Yes NULL

The majority of staff uploading user records all work fine, however one particular user gets the following error. If I get this user to send me the file to upload I upload it and it works fine. Yet when they upload it they get this error.

[Wed Oct 23 22:14:53 2013] [error] [client 115.75.129.87] PHP Fatal error:  Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (0) at position 0 (0): Unexpected character' in /home/sobs/build/classes/focus_sobs/om/BaseUser.php:1665\n
Stack trace:\n#0 /home/sobs/build/classes/focus_sobs/om/BaseUser.php(1665): DateTime->__construct('0')\n
#1 /home/sobs/build/classes/focus_sobs/om/BaseUser.php(1954): BaseUser->setUpdatedAt(1382530493)\n
#2 /home/sobs/build/classes/focus_sobs/UserPeer.php(676): BaseUser->save()\n
#3 /home/sobs/build/import3-content.php(124): UserPeer::import(Array, true, 861, false, false)\n
#4 /home/sobs/build/topline.php(302): include('/home/sobs/buil...')\n
#5 /home/sobs/build/pt/import3.php(9): include('/home/sobs/buil...')\n
#6 {main}\n  thrown in /home/sobs/build/classes/focus_sobs/om/BaseUser.php on line 1665, referer: http://sobs.com.au/pt/import2.php

This staff member is in Vietnam yet we are both on the same server in Australia. The php.ini looks like:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Australia/Brisbane

Looking at the code in BaseUser.php
Line 1954: $this->setUpdatedAt(time());

And the function setUpdateAt()
public function setUpdatedAt($v)
{
$dt = PropelDateTime::newInstance($v, null, 'DateTime');
if ($this->updated_at !== null || $dt !== null) {
Line 1665 $currentDateAsString = ($this->updated_at !== null && $tmpDt = new DateTime($this->updated_at)) ? $tmpDt->format('Y-m-d H:i:s') : null;
$newDateAsString = $dt ? $dt->format('Y-m-d H:i:s') : null;
if ($currentDateAsString !== $newDateAsString) {
$this->updated_at = $newDateAsString;
$this->modifiedColumns[] = UserPeer::UPDATED_AT;
}
} // if either are not null
return $this;
} // setUpdatedAt()

A value is being passed in here, however the $this->updated_at does not seem to have been populated, and neither is it null, but a '0', which causes the error in the DateTime constructor.

Perhaps we should test for 0 or null and do the same process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant