/** * @param $db_table_name * @param SJB_Object $object * @param bool $sid * @param array $listingSidsForCopy * @return bool */ public static function saveObject($db_table_name, SJB_Object $object, $sid = false, $listingSidsForCopy = array()) { $object_sid = $object->getSID(); if (is_null($object_sid)) { if ($sid) { if (!SJB_DB::query("INSERT INTO ?w (sid) VALUES({$sid})", $db_table_name)) { return false; } else { $object_sid = $sid; } } elseif (!$sid && !($object_sid = SJB_DB::query("INSERT INTO ?w() VALUES()", $db_table_name))) { return false; } $object->setSID($object_sid); } if (!empty($listingSidsForCopy)) { SJB_ListingManager::copyFilesAndPicturesFromListing($listingSidsForCopy['filesFrom'], $object_sid, $listingSidsForCopy['picturesFrom']); } $object_details = $object->getDetails(); $object_properties = $object_details->getProperties(); $complexFields = array(); foreach ($object_properties as $object_property) { if (!$object_property->saveIntoBD()) { continue; } if ($object_property->isComplex()) { $complexProperties = $object_property->type->complex->getProperties(); $propertyId = $object_property->getID(); $complexFields[$propertyId] = array(); if ($complexProperties) { foreach ($complexProperties as $complexProperty) { $complexProperty->setObjectSID($object_property->object_sid); $fieldValues = $complexProperty->getValue(); if (!empty($fieldValues) && is_array($fieldValues)) { foreach ($fieldValues as $complexEnum => $value) { $complexProperty->setValue($value); $complexProperty->setComplexEnum($complexEnum); $complexProperty->setComplexParent($propertyId); $propertySqlValue = $complexProperty->getSQLValue(); $complexPropertyID = $complexProperty->getID(); $complexParameter = $complexProperty->getAddParameter(); if ($complexParameter == '') { $complexFields[$propertyId][$complexPropertyID][$complexEnum] = $propertySqlValue == 'NULL' ? NULL : $propertySqlValue; } else { $complexFields[$propertyId][$complexPropertyID][$complexEnum] = array('add_parameter' => $complexParameter, 'value' => $propertySqlValue == 'NULL' ? NULL : $propertySqlValue); } } $complexProperty->setValue($fieldValues); } } } } elseif ($object_property->isParent()) { $childProperties = $object_property->type->child->getProperties(); $parentID = $object_property->getID(); $keywords = ''; if ($childProperties) { foreach ($childProperties as $childProperty) { $childProperty->setObjectSID($object_property->object_sid); $property_id = $parentID . "_" . $childProperty->getID(); $property_sql_value = $childProperty->getSQLValue(); if ($childProperty->getID() == 'State') { $displayAS = $childProperty->display_as; $displayAS = $displayAS ? $displayAS : 'state_name'; $childProperty->type->list_values = SJB_StatesManager::getStatesNamesByCountry(false, true, $displayAS); } $keywords .= $childProperty->getKeywordValue() . ' '; if (empty($property_sql_value) && in_array($childProperty->getType(), array('boolean', 'integer', 'float'))) { $property_sql_value = 0; } SJB_DB::query("UPDATE `?w` SET `?w` = ?s WHERE sid = ?n", $db_table_name, $property_id, $property_sql_value, $object_sid); } } $origValue = $object_property->getValue(); $object_property->setValue($keywords); $property_id = $object_property->getID(); $property_sql_value = $object_property->getSQLValue(); $object_property->setValue($origValue); SJB_DB::query("UPDATE `?w` SET `?w` = ?s WHERE sid = ?n", $db_table_name, $property_id, $property_sql_value, $object_sid); } else { $property_id = $object_property->getID(); $property_sql_value = $object_property->getSQLValue(); $property_sql_add_parameter = $object_property->getAddParameter(); if ($object_property->isSystem()) { if (empty($property_sql_value) && in_array($object_property->getType(), array('boolean', 'integer', 'float'))) { $property_sql_value = 0; } SJB_DB::query("UPDATE `?w` SET `?w` = ?s WHERE sid = ?n", $db_table_name, $property_id, $property_sql_value, $object_sid); if (!empty($property_sql_add_parameter)) { if ($object_property->getType() == 'monetary' && $object->getObjectType() != 'field') { SJB_DB::query("UPDATE `?w` SET `?w` = ?w WHERE sid = ?n", $db_table_name, $property_id . '_parameter', $property_sql_add_parameter, $object_sid); } else { SJB_DB::query("UPDATE `?w` SET `add_parameter` = ?w WHERE sid = ?n", $db_table_name, $property_sql_add_parameter, $object_sid); } } } else { if (SJB_DB::table_exists($db_table_name . "_properties")) { $property_exists = SJB_DB::queryValue("SELECT COUNT(*) FROM ?w WHERE object_sid = ?n AND id = ?s", $db_table_name . "_properties", $object_sid, $property_id); if ($property_exists) { SJB_DB::query("UPDATE ?w SET value = ?s, add_parameter = ?s WHERE object_sid = ?n AND id = ?s", $db_table_name . "_properties", $property_sql_value, $property_sql_add_parameter, $object_sid, $property_id); } else { SJB_DB::query("INSERT INTO ?w(object_sid, id , value, add_parameter) VALUES(?n, ?s, ?s, ?s)", $db_table_name . "_properties", $object_sid, $property_id, $property_sql_value, $property_sql_add_parameter); } } } } } if (!empty($complexFields)) { SJB_DB::query("UPDATE `?w` SET `?w` = ?s WHERE sid = ?n", $db_table_name, 'complex', serialize($complexFields), $object_sid); } }