Пример #1
0
/**
 * Function creates or updates image
 *
 * @param mixed $image_data Array with image data
 * @param int $image_id Image ID
 * @param string $image_type Type (object) of image (may be product, category, and so on)
 * @param string $lang_code 2 letters language code
 * @return int Updated or inserted image ID. False on failure.
 */
function fn_update_image($image_data, $image_id = 0, $image_type = 'product', $lang_code = CART_LANGUAGE)
{
    $images_path = $image_type . '/';
    $_data = array();
    if (empty($image_id)) {
        $max_id = db_get_next_auto_increment_id('images');
        $img_id_subdir = floor($max_id / MAX_FILES_IN_DIR) . "/";
    } else {
        $img_id_subdir = floor($image_id / MAX_FILES_IN_DIR) . "/";
    }
    $images_path .= $img_id_subdir;
    list($_data['image_x'], $_data['image_y'], $mime_type) = fn_get_image_size($image_data['path']);
    // Get the real image type
    $ext = fn_get_image_extension($mime_type);
    if (strpos($image_data['name'], '.') === false) {
        $image_data['name'] .= '.' . $ext;
    }
    // Check if image path already set
    $image_path = db_get_field("SELECT image_path FROM ?:images WHERE image_id = ?i", $image_id);
    // Delete existing image
    if (!empty($image_path)) {
        Storage::instance('images')->delete($images_path . $image_path);
        // Clear all existing thumbnails
        fn_delete_image_thumbnails($images_path . $image_path);
    }
    /**
     * Hook is executed before saving or updating an image.
     *
     * @param array  $image_data  Image data
     * @param int    $image_id    Image ID
     * @param string $image_type  Type of an object image belongs to (product, category, etc.)
     * @param string $images_path Path to directory image is located at
     * @param array  $_data       Data to be saved into "images" DB table
     * @param string $mime_type   MIME type of an image file
     */
    fn_set_hook('update_image', $image_data, $image_id, $image_type, $images_path, $_data, $mime_type);
    $params = array('file' => $image_data['path']);
    if (!empty($image_data['params'])) {
        $params = fn_array_merge($params, $image_data['params']);
    }
    list($_data['image_size'], $_data['image_path']) = Storage::instance('images')->put($images_path . $image_data['name'], $params);
    $_data['image_path'] = fn_basename($_data['image_path']);
    // we need to store file name only
    if (!empty($image_id)) {
        db_query("UPDATE ?:images SET ?u WHERE image_id = ?i", $_data, $image_id);
    } else {
        $image_id = db_query("INSERT INTO ?:images ?e", $_data);
    }
    return $image_id;
}
Пример #2
0
/**
 * Function creates or updates image
 *
 * @param mixed $image_data Array with image data
 * @param int $image_id Image ID
 * @param string $image_type Type (object) of image (may be product, category, and so on)
 * @param string $lang_code 2 letters language code
 * @return int Updated or inserted image ID. False on failure.
 */
function fn_update_image($image_data, $image_id = 0, $image_type = 'product', $lang_code = CART_LANGUAGE)
{
    $images_path = $image_type . '/';
    $_data = array();
    if (empty($image_id)) {
        $max_id = db_get_next_auto_increment_id('images');
        $img_id_subdir = floor($max_id / MAX_FILES_IN_DIR) . "/";
    } else {
        $img_id_subdir = floor($image_id / MAX_FILES_IN_DIR) . "/";
    }
    $images_path .= $img_id_subdir;
    list($_data['image_x'], $_data['image_y'], $mime_type) = fn_get_image_size($image_data['path']);
    // Get the real image type
    $ext = fn_get_image_extension($mime_type);
    if (strpos($image_data['name'], '.') === false) {
        $image_data['name'] .= '.' . $ext;
    }
    // Check if image path already set
    $image_path = db_get_field("SELECT image_path FROM ?:images WHERE image_id = ?i", $image_id);
    // Delete existing image
    if (!empty($image_path)) {
        Storage::instance('images')->delete($images_path . $image_path);
        // Clear all existing thumbnails
        fn_delete_image_thumbnails($images_path . $image_path);
    }
    fn_set_hook('update_image', $image_data, $image_id, $image_type, $images_path, $_data);
    $params = array('file' => $image_data['path']);
    if (!empty($image_data['params'])) {
        $params = fn_array_merge($params, $image_data['params']);
    }
    list($_data['image_size'], $_data['image_path']) = Storage::instance('images')->put($images_path . $image_data['name'], $params);
    $_data['image_path'] = fn_basename($_data['image_path']);
    // we need to store file name only
    if (!empty($image_id)) {
        db_query("UPDATE ?:images SET ?u WHERE image_id = ?i", $_data, $image_id);
    } else {
        $image_id = db_query("INSERT INTO ?:images ?e", $_data);
    }
    return $image_id;
}
Пример #3
0
function fn_banners_update_banner($data, $banner_id, $lang_code = DESCR_SL)
{
    if (isset($data['timestamp'])) {
        $data['timestamp'] = fn_parse_date($data['timestamp']);
    }
    $data['localization'] = empty($data['localization']) ? '' : fn_implode_localizations($data['localization']);
    if (!empty($banner_id)) {
        db_query("UPDATE ?:banners SET ?u WHERE banner_id = ?i", $data, $banner_id);
        db_query("UPDATE ?:banner_descriptions SET ?u WHERE banner_id = ?i AND lang_code = ?s", $data, $banner_id, $lang_code);
        $banner_image_id = fn_get_banner_image_id($banner_id, $lang_code);
        $banner_image_exist = !empty($banner_image_id);
        $banner_is_multilang = Registry::get('addons.banners.banner_multilang') == 'Y';
        $image_is_update = fn_banners_need_image_update();
        if ($banner_is_multilang) {
            if ($banner_image_exist && $image_is_update) {
                fn_delete_image_pairs($banner_image_id, 'promo');
                db_query("DELETE FROM ?:banner_images WHERE banner_id = ?i AND lang_code = ?s", $banner_id, $lang_code);
                $banner_image_exist = false;
            }
        } else {
            if (isset($data['url'])) {
                db_query("UPDATE ?:banner_descriptions SET url = ?s WHERE banner_id = ?i", $data['url'], $banner_id);
            }
        }
        if ($image_is_update && !$banner_image_exist) {
            $banner_image_id = db_query("INSERT INTO ?:banner_images (banner_id, lang_code) VALUE(?i, ?s)", $banner_id, $lang_code);
        }
        $pair_data = fn_attach_image_pairs('banners_main', 'promo', $banner_image_id, $lang_code);
        if (!$banner_is_multilang && !$banner_image_exist) {
            fn_banners_image_all_links($banner_id, $pair_data, $lang_code);
        }
    } else {
        $banner_id = $data['banner_id'] = db_query("REPLACE INTO ?:banners ?e", $data);
        foreach (Languages::getAll() as $data['lang_code'] => $v) {
            db_query("REPLACE INTO ?:banner_descriptions ?e", $data);
        }
        if (fn_banners_need_image_update()) {
            $data_banner_image = array('banner_id' => $banner_id, 'lang_code' => $lang_code);
            $banner_image_id = db_get_next_auto_increment_id('banner_images');
            $pair_data = fn_attach_image_pairs('banners_main', 'promo', $banner_image_id, $lang_code);
            if (!empty($pair_data)) {
                db_query("INSERT INTO ?:banner_images ?e", $data_banner_image);
                fn_banners_image_all_links($banner_id, $pair_data, $lang_code);
            }
        }
    }
    return $banner_id;
}