function fn_update_promotion($data, $promotion_id, $lang_code = DESCR_SL) { if (!empty($data['conditions']['conditions'])) { $data['conditions_hash'] = fn_promotion_serialize($data['conditions']['conditions']); $data['users_conditions_hash'] = fn_promotion_serialize_users_conditions($data['conditions']['conditions']); } else { $data['conditions_hash'] = $data['users_conditions_hash'] = ''; } $data['conditions'] = empty($data['conditions']) ? array() : $data['conditions']; $data['bonuses'] = empty($data['bonuses']) ? array() : $data['bonuses']; fn_promotions_check_group_conditions($data['conditions']); if ($data['bonuses']) { foreach ($data['bonuses'] as $k => $v) { if (empty($v['bonus'])) { unset($data['bonuses'][$k]); } } } $data['conditions'] = serialize($data['conditions']); $data['bonuses'] = serialize($data['bonuses']); $from_date = $data['from_date']; $to_date = $data['to_date']; $data['from_date'] = !empty($from_date) ? fn_parse_date($from_date) : 0; $data['to_date'] = !empty($to_date) ? fn_parse_date($to_date, true) : 0; if (!empty($data['to_date']) && $data['to_date'] < $data['from_date']) { // protection from incorrect date range (special for isergi :)) $data['from_date'] = fn_parse_date($to_date); $data['to_date'] = fn_parse_date($from_date, true); } if (!empty($promotion_id)) { db_query("UPDATE ?:promotions SET ?u WHERE promotion_id = ?i", $data, $promotion_id); db_query('UPDATE ?:promotion_descriptions SET ?u WHERE promotion_id = ?i AND lang_code = ?s', $data, $promotion_id, $lang_code); } else { $promotion_id = $data['promotion_id'] = db_query("REPLACE INTO ?:promotions ?e", $data); foreach (fn_get_translation_languages() as $data['lang_code'] => $_v) { db_query("REPLACE INTO ?:promotion_descriptions ?e", $data); } } return $promotion_id; }
/** * Serialize promotion conditions for search * * @param array $conditions conditions * @param boolean $plain flag - return as string (true) or array (false) * @return mixed serialized data */ function fn_promotion_serialize($conditions, $plain = true) { $result = array(); foreach ($conditions as $c) { if (!empty($c['conditions'])) { $result = fn_array_merge($result, fn_promotion_serialize($c['conditions']), false); } elseif (isset($c['value'])) { if ($c['condition'] == 'auto_coupons' || $c['condition'] == 'coupon_code') { $vals = explode(',', $c['value']); foreach ($vals as $v) { $result[] = $c['condition'] . '=' . $v; } } else { if (is_array($c['value'])) { $c['value'] = implode(',', array_keys($c['value'])); } $result[] = $c['condition'] . '=' . $c['value']; } } } return $plain == true ? implode(';', $result) : $result; }
/** * Serialize promotion conditions for search * * @param array $conditions conditions * @param boolean $plain flag - return as string (true) or array (false) * @return mixed serialized data */ function fn_promotion_serialize($conditions, $plain = true) { $result = array(); foreach ($conditions as $c) { if (!empty($c['conditions'])) { $result = fn_array_merge($result, fn_promotion_serialize($c['conditions']), false); } elseif (isset($c['value'])) { $result[] = $c['condition'] . '=' . $c['value']; } } return $plain == true ? implode(';', $result) : $result; }