303 lines
8.6 KiB
PHP

<?php
class FileMaker_Record_Implementation
{
var $_fields = array();
var $V5e7ec2d5 = array();
var $_recordId;
var $_modificationId;
var $_layout;
var $_fm;
var $_relatedSets = array();
var $_parent = null;
function FileMaker_Record_Implementation(&$Vc6140495)
{
$this->_layout =& $Vc6140495;
$this->_fm =& $Vc6140495->_impl->_fm;
}
function &getLayout()
{
return $this->_layout;
}
function getFields()
{
return $this->_layout->listFields();
}
function getField($V06e3d36f, $V6d786dc7 = 0)
{
if (!isset($this->_fields[$V06e3d36f])) {
$this->_fm->log('Field "' . $V06e3d36f . '" not found.', FILEMAKER_LOG_INFO);
return "";
}
if (!isset($this->_fields[$V06e3d36f][$V6d786dc7])) {
$this->_fm->log('Repetition "' . (int)$V6d786dc7 . '" does not exist for "' . $V06e3d36f . '".', FILEMAKER_LOG_INFO);
return "";
}
return htmlspecialchars($this->_fields[$V06e3d36f][$V6d786dc7]);
}
function getFieldUnencoded($V06e3d36f, $V6d786dc7 = 0)
{
if (!isset($this->_fields[$V06e3d36f])) {
$this->_fm->log('Field "' . $V06e3d36f . '" not found.', FILEMAKER_LOG_INFO);
return "";
}
if (!isset($this->_fields[$V06e3d36f][$V6d786dc7])) {
$this->_fm->log('Repetition "' . (int)$V6d786dc7 . '" does not exist for "' . $V06e3d36f . '".', FILEMAKER_LOG_INFO);
return "";
}
return $this->_fields[$V06e3d36f][$V6d786dc7];
}
function getFieldAsTimestamp($V972bf3f0, $V6d786dc7 = 0)
{
$V2063c160 = $this->getField($V972bf3f0, $V6d786dc7);
if (FileMaker::isError($V2063c160)) {
return $V2063c160;
}
$V06e3d36f =& $this->_layout->getField($V972bf3f0);
if (FileMaker::isError($V06e3d36f)) {
return $V06e3d36f;
}
switch ($V06e3d36f->getResult()) {
case 'date':
$V78f0805f = explode('/', $V2063c160);
if (count($V78f0805f) != 3) {
return new FileMaker_Error($this->_fm, 'Failed to parse "' . $V2063c160 . '" as a FileMaker date value.');
}
$Vd7e6d55b = @mktime(0, 0, 0, $V78f0805f[0], $V78f0805f[1], $V78f0805f[2]);
if ($Vd7e6d55b === false) {
return new FileMaker_Error($this->_fm, 'Failed to convert "' . $V2063c160 . '" to a UNIX timestamp.');
}
break;
case 'time':
$V78f0805f = explode(':', $V2063c160);
if (count($V78f0805f) != 3) {
return new FileMaker_Error($this->_fm, 'Failed to parse "' . $V2063c160 . '" as a FileMaker time value.');
}
$Vd7e6d55b = @mktime($V78f0805f[0], $V78f0805f[1], $V78f0805f[2], 1, 1, 1970);
if ($Vd7e6d55b === false) {
return new FileMaker_Error($this->_fm, 'Failed to convert "' . $V2063c160 . '" to a UNIX timestamp.');
}
break;
case 'timestamp':
$Vd7e6d55b = @strtotime($V2063c160);
if ($Vd7e6d55b === false) {
return new FileMaker_Error($this->_fm, 'Failed to convert "' . $V2063c160 . '" to a UNIX timestamp.');
}
break;
default:
$Vd7e6d55b = new FileMaker_Error($this->_fm, 'Only time, date, and timestamp fields can be converted to UNIX timestamps.');
break;
}
return $Vd7e6d55b;
}
function setField($V06e3d36f, $V2063c160, $V6d786dc7 = 0)
{
$this->_fields[$V06e3d36f][$V6d786dc7] = $V2063c160;
$this->V5e7ec2d5[$V06e3d36f][$V6d786dc7] = true;
return $V2063c160;
}
function setFieldFromTimestamp($V972bf3f0, $Vd7e6d55b, $V6d786dc7 = 0)
{
$V06e3d36f = $this->_layout->getField($V972bf3f0);
if (FileMaker::isError($V06e3d36f)) {
return $V06e3d36f;
}
switch ($V06e3d36f->getResult()) {
case 'date':
return $this->setField($V972bf3f0, date('m/d/Y', $Vd7e6d55b), $V6d786dc7);
case 'time':
return $this->setField($V972bf3f0, date('H:i:s', $Vd7e6d55b), $V6d786dc7);
case 'timestamp':
return $this->setField($V972bf3f0, date('m/d/Y H:i:s', $Vd7e6d55b), $V6d786dc7);
}
return new FileMaker_Error($this->_fm, 'Only time, date, and timestamp fields can be set to the value of a timestamp.');
}
function getRecordId()
{
return $this->_recordId;
}
function getModificationId()
{
return $this->_modificationId;
}
function &getRelatedSet($Vaca007a7)
{
if (empty($this->_relatedSets[$Vaca007a7])) {
$Vcb5e100e = new FileMaker_Error($this->_fm, 'Related set "' . $Vaca007a7 . '" not present.');
return $Vcb5e100e;
}
return $this->_relatedSets[$Vaca007a7];
}
function &newRelatedRecord(&$Vd0e45878, $Vaca007a7)
{
$V3a2d7564 =& $this->_layout->getRelatedSet($Vaca007a7);
if (FileMaker::isError($V3a2d7564)) {
return $V3a2d7564;
}
$Vde17f0f2 = new FileMaker_Record($V3a2d7564);
$Vde17f0f2->_impl->_parent =& $Vd0e45878;
return $Vde17f0f2;
}
function &getParent()
{
return $this->_parent;
}
function validate($V972bf3f0 = null)
{
$V1dccadfe =& $this->_fm->newAddCommand($this->_layout->getName(), $this->_fields);
return $V1dccadfe->validate($V972bf3f0);
}
function commit()
{
if ($this->_fm->getProperty('prevalidate')) {
$V9f7d0ee8 = $this->validate();
if (FileMaker::isError($V9f7d0ee8)) {
return $V9f7d0ee8;
}
}
if (is_null($this->_parent)) {
if ($this->_recordId) {
return $this->_commitEdit();
} else {
return $this->_commitAdd();
}
} else {
if (!$this->_parent->getRecordId()) {
return new FileMaker_Error($this->_fm, 'You must commit the parent record first before you can commit its children.');
}
if ($this->_recordId) {
return $this->_commitEditChild();
} else {
return $this->_commitAddChild();
}
}
}
function delete()
{
if (empty($this->_recordId)) {
return new FileMaker_Error($this->_fm, 'You cannot delete a record that does not exist on the server.');
}
if ($this->_parent) {
$Vd05b6ed7 = array();
$V1dccadfe =& $this->_fm->newEditCommand($this->_parent->_impl->_layout->getName(),
$this->_parent->_impl->_recordId,
$Vd05b6ed7);
$V1dccadfe->_impl->_setdeleteRelated($this->_layout->getName().".".$this->_recordId);
return $V1dccadfe->execute();
}
else {
$Vc6140495 = $this->_layout->getName();
$V1dccadfe =& $this->_fm->newDeleteCommand($Vc6140495, $this->_recordId);
return $V1dccadfe->execute();
}
}
function _commitAdd()
{
$V1dccadfe =& $this->_fm->newAddCommand($this->_layout->getName(), $this->_fields);
$Vd1fc8eaf = $V1dccadfe->execute();
if (FileMaker::isError($Vd1fc8eaf)) {
return $Vd1fc8eaf;
}
$V6e52c40b =& $Vd1fc8eaf->getRecords();
return $this->_updateFrom($V6e52c40b[0]);
}
function _commitEdit()
{
foreach ($this->_fields as $V972bf3f0 => $Vd4680e80) {
foreach ($Vd4680e80 as $V6d786dc7 => $V2063c160) {
if (isset($this->V5e7ec2d5[$V972bf3f0][$V6d786dc7])) {
$V8977dfac[$V972bf3f0][$V6d786dc7] = $V2063c160;
}
}
}
$V1dccadfe =& $this->_fm->newEditCommand($this->_layout->getName(),
$this->_recordId,
$V8977dfac);
$Vd1fc8eaf = $V1dccadfe->execute();
if (FileMaker::isError($Vd1fc8eaf)) {
return $Vd1fc8eaf;
}
$V6e52c40b =& $Vd1fc8eaf->getRecords();
return $this->_updateFrom($V6e52c40b[0]);
}
function _commitAddChild()
{
$Vd05b6ed7 = array();
foreach ($this->_fields as $Vb068931c => $Vee0525e4) {
$Vd05b6ed7[$Vb068931c . '.0'] = $Vee0525e4;
}
$V1dccadfe =& $this->_fm->newEditCommand($this->_parent->_impl->_layout->getName(),
$this->_parent->getRecordId(),
$Vd05b6ed7);
$Vd1fc8eaf = $V1dccadfe->execute();
if (FileMaker::isError($Vd1fc8eaf)) {
return $Vd1fc8eaf;
}
$V6e52c40b =& $Vd1fc8eaf->getRecords();
$Vd0e45878 =& $V6e52c40b[0];
$V268184c1 =& $Vd0e45878->getRelatedSet($this->_layout->getName());
$V98bd1c45 = array_pop($V268184c1);
return $this->_updateFrom($V98bd1c45);
}
function _commitEditChild()
{
foreach ($this->_fields as $V972bf3f0 => $Vee0525e4) {
foreach ($Vee0525e4 as $V6d786dc7 => $V2063c160) {
if (!empty($this->V5e7ec2d5[$V972bf3f0][$V6d786dc7])) {
$V8977dfac[$V972bf3f0 . '.' . $this->_recordId][$V6d786dc7] = $V2063c160;
}
}
}
$V1dccadfe =& $this->_fm->newEditCommand($this->_parent->_impl->_layout->getName(),
$this->_parent->getRecordId(),
$V8977dfac);
$Vd1fc8eaf = $V1dccadfe->execute();
if (FileMaker::isError($Vd1fc8eaf)) {
return $Vd1fc8eaf;
}
$V6e52c40b =& $Vd1fc8eaf->getRecords();
$Vd0e45878 =& $V6e52c40b[0];
$V268184c1 =& $Vd0e45878->getRelatedSet($this->_layout->getName());
foreach ($V268184c1 as $V1b7d5726) {
if ($V1b7d5726->getRecordId() == $this->_recordId) {
return $this->_updateFrom($V1b7d5726);
break;
}
}
return new FileMaker_Error('Failed to find the updated child in the response.');
}
function _updateFrom(&$Vde17f0f2)
{
$this->_recordId = $Vde17f0f2->getRecordId();
$this->_modificationId = $Vde17f0f2->getModificationId();
$this->_fields = $Vde17f0f2->_impl->_fields;
$this->_layout =& $Vde17f0f2->_impl->_layout;
$this->_relatedSets =& $Vde17f0f2->_impl->_relatedSets;
$this->V5e7ec2d5= array();
return true;
}
function getRelatedRecordById($V97f7e518, $Va6ec9c02)
{
$Vaca007a7 = $this->getRelatedSet($V97f7e518);
if(FileMaker::IsError($Vaca007a7)){
$Vcb5e100e = new FileMaker_Error($this->_fm, 'Related set "' . $Vaca007a7 . '" not present.');
return $Vcb5e100e;
}else{
foreach ($Vaca007a7 as $V1b7d5726) {
if( $V1b7d5726->getRecordId() == $Va6ec9c02){
return $V1b7d5726;
}
}
$Vcb5e100e = new FileMaker_Error($this->_fm, 'Record not present.');
return $Vcb5e100e;
}
}
}