ECJiaWiki:Version 1.19.0

来自ECJiaWiki
跳转至: 导航搜索

更新版本

v1.19.0

20180817374

更新内容

EC+到家v1.19.0更新日志:

  1. 【平台】新增商品库管理功能;
  2. 【平台】新增手动添加商品库商品功能;
  3. 【平台】新增商品库列表按商品关键词名称搜索商品;[平台】新增预览商品库商品详细信息功能;
  4. 【平台】新增批量删除、上架、下架商品库商品功能;
  5. 【平台】新增批量导入商品至商品库功能;
  6. 【平台】新增下载批量导入商品至商品库Excel模板;
  7. 【平台】新增批量导入时,系统自动核对上传数据;
  8. 【平台】新增批量导出商品库里面的商品;
  9. 【平台】新增商品库按全部商品批量导出功能;
  10. 【平台】新增商品库按指定分类批量导出功能;
  11. 【平台】新增商品库按品牌筛选批量导出功能;
  12. 【平台】新增添加/编辑/删除商品库规格管理功能;
  13. 【平台】新增添加/编辑/删除商品库商品属性功能;
  14. 【平台】新增批量删除商品库商品属性功能;
  15. 【平台】新增审核商家详情增加企业入驻类型;
  16. 【平台】修复平台后台编辑公众平台功能扩展插件配置报错;
  17. 【平台】修复公众平台-功能扩展-编辑,点击后报错的问题;
  18. 【平台】修复友情链接页面报错问题;
  19. 【平台】修复营销活动页面报错问题;
  20. 【平台】修复升级后工具中有2个日志查看,应用问题;
  21. 【平台】修复服务-云店铺,生成的二维码无法识别;
  22. 【平台】优化后台提现申请审核通过,解冻提现时冻结的金额;
  23. 【平台】优化删除,批量删除提现申请时,如果是到款状态是未确定,解冻提现申请时冻结的金额;
  24. 【平台】优化后台管理员添加提现申请,到款状态为未审核时记录资金变动记录,冻结提现金额;
  25. 【商家】新增一键导入平台商品库商品到商家后台功能;
  26. 【商家】新增导入单件平台商品库商品功能;
  27. 【商家】新增预览平台商品库商品详细信息功能;
  28. 【商家】新增导入单件商品库商品时,修改商品基本信息后导入功能;
  29. 【商家】新增商家个人入驻升级为企业入驻功能;
  30. 【商家】新增企业入驻时上传营业执照图片功能;
  31. 【商家】修复只有上门取货配送方式的时候,无法提交订单的问题;
  32. 【商家】优化编辑商品时,商品属性与商品货号合并为商品规格;
  33. 【商家】优化公众平台,营销活动抽奖记录列表优化,增加筛选,下载实物中奖用户信息;

【H5】

  1. 【新增】我的钱包增加添加红包入口;
  2. 【新增】输入红包序列号添加红包功能;

【接口】

  1. 【新增】线下红包验证接口;
  2. 【新增】线下红包兑换接口;
  3. 【优化】会员提现申请时,申请提现的金额从会员金额中冻结;
  4. 【优化】会员撤销提现申请时,解冻申请提现时冻结的金额;
  5. 【优化】掌柜登录,员工所在店铺被锁定的话提示店铺锁定;
  6. 【优化】店铺锁定,商品加入购物车,更新购物车提示店铺已锁定;
  7. 【优化】店铺锁定,结算提示店铺已锁定;
  8. 【修复】新人有礼领取无限制问题修改;

更新文件

M	bootstrap/cache/services.json
M	bootstrap/classmap.php
M	content/apps/api/classes/api_response.class.php
M	content/apps/api/configs/package.php
M	content/apps/api/index.php
M	content/apps/bonus/configs/package.php
A	content/apps/bonus/modules/bonus/bind_module.class.php
A	content/apps/bonus/modules/bonus/validate_module.class.php
M	content/apps/captcha/configs/package.php
M	content/apps/captcha/modules/captcha/mail_module.class.php
A	content/apps/cart/classes/StoreStatus.php
M	content/apps/cart/classes/cart.class.php
A	content/apps/cart/classes/cart_cashdesk.class.php
M	content/apps/cart/configs/package.php
M	content/apps/cart/modules/cart/create_module.class.php
M	content/apps/cart/modules/flow/checkOrder_module.class.php
M	content/apps/cart/modules/storebuy/cart/create_module.class.php
M	content/apps/cart/modules/storebuy/flow/checkOrder_module.class.php
M	content/apps/cart/modules/storepickup/flow/checkOrder_module.class.php
M	content/apps/finance/admin_account.php
M	content/apps/finance/configs/package.php
M	content/apps/finance/templates/admin/admin_account_edit.dwt.php
M	content/apps/franchisee/configs/package.php
M	content/apps/franchisee/merchant.php
M	content/apps/franchisee/templates/merchant/franchisee.dwt.php
M	content/apps/goods/admin.php
M	content/apps/goods/admin_gallery.php
M	content/apps/goods/apis/goods_admin_menu_api.class.php
M	content/apps/goods/apis/goods_admin_purview_api.class.php
M	content/apps/goods/apis/goods_merchant_menu_api.class.php
M	content/apps/goods/classes/goods.class.php
M	content/apps/goods/classes/goods_imageutils.class.php
M	content/apps/goods/configs/package.php
M	content/apps/goods/functions/admin_goods.func.php
M	content/apps/goods/functions/global.func.php
M	content/apps/goods/merchant.php
M	content/apps/goods/modules/admin/goods/update_module.class.php
M	content/apps/goods/modules/admin/goods/updateprice_module.class.php
M	content/apps/goods/statics/js/goods_list.js
M	content/apps/goods/statics/styles/goods.css
M	content/apps/goods/templates/admin/goods_list.dwt.php
M	content/apps/goods/templates/merchant/goods_list.dwt.php
A	content/apps/goodslib/admin.php
A	content/apps/goodslib/admin_attribute.php
A	content/apps/goodslib/admin_gallery.php
A	content/apps/goodslib/admin_goods_spec.php
A	content/apps/goodslib/apis/goodslib_admin_menu_api.class.php
A	content/apps/goodslib/apis/goodslib_admin_purview_api.class.php
A	content/apps/goodslib/apis/goodslib_merchant_purview_api.class.php
A	content/apps/goodslib/classes/GoodslibServiceProvider.php
A	content/apps/goodslib/classes/goods_image_data.class.php
A	content/apps/goodslib/classes/goods_imageutils.class.php
A	content/apps/goodslib/classes/goodslib.class.php
A	content/apps/goodslib/classes/hooks/merchant_goodslib.class.php
A	content/apps/goodslib/configs/package.php
A	content/apps/goodslib/functions/global.func.php
A	content/apps/goodslib/languages/zh_CN/package.lang.php
A	content/apps/goodslib/merchant.php
A	content/apps/goodslib/statics/files/goodslib.xls
A	content/apps/goodslib/statics/files/goodslib_demo.xls
A	content/apps/goodslib/statics/images/goleft.gif
A	content/apps/goodslib/statics/images/goleft2.gif
A	content/apps/goodslib/statics/images/goright.gif
A	content/apps/goodslib/statics/images/goright2.gif
A	content/apps/goodslib/statics/images/order-time-base.png
A	content/apps/goodslib/statics/images/switch.gif
A	content/apps/goodslib/statics/js/goods_attribute.js
A	content/apps/goodslib/statics/js/goods_list.js
A	content/apps/goodslib/statics/js/merchant_goods_list.js
A	content/apps/goodslib/statics/js/product.js
A	content/apps/goodslib/statics/styles/goods.css
A	content/apps/goodslib/statics/styles/goods_category.css
A	content/apps/goodslib/templates/admin/attribute_info.dwt.php
A	content/apps/goodslib/templates/admin/attribute_list.dwt.php
A	content/apps/goodslib/templates/admin/goods_attr.dwt.php
A	content/apps/goodslib/templates/admin/goods_desc.dwt.php
A	content/apps/goodslib/templates/admin/goods_photo.dwt.php
A	content/apps/goodslib/templates/admin/goods_type_info.dwt.php
A	content/apps/goodslib/templates/admin/goods_type_list.dwt.php
A	content/apps/goodslib/templates/admin/goodslib_import.dwt.php
A	content/apps/goodslib/templates/admin/goodslib_import_success.dwt.php
A	content/apps/goodslib/templates/admin/goodslib_info.dwt.php
A	content/apps/goodslib/templates/admin/goodslib_list.dwt.php
A	content/apps/goodslib/templates/admin/preview.dwt.php
A	content/apps/goodslib/templates/admin/product_info.dwt.php
A	content/apps/goodslib/templates/merchant/goods_cat_select.dwt.php
A	content/apps/goodslib/templates/merchant/goods_list.dwt.php
A	content/apps/goodslib/templates/merchant/library/goods_insert.lbi.php
A	content/apps/goodslib/templates/merchant/library/goods_step.lbi.php
A	content/apps/goodslib/templates/merchant/preview.dwt.php
A	content/apps/goodslib/templates/merchant/success.dwt.php
M	content/apps/groupbuy/admin.php
M	content/apps/groupbuy/configs/package.php
M	content/apps/groupbuy/merchant.php
M	content/apps/groupbuy/templates/admin/group_buy_info.dwt.php
M	content/apps/groupbuy/templates/admin/group_buy_list.dwt.php
M	content/apps/groupbuy/templates/merchant/group_buy_info.dwt.php
M	content/apps/groupbuy/templates/merchant/group_buy_list.dwt.php
M	content/apps/market/classes/Activities/MobileShake.php
M	content/apps/market/classes/Activities/WechatDaZhuanPan.php
M	content/apps/market/classes/Activities/WechatGuaGuaLe.php
M	content/apps/market/classes/Activities/WechatZaJinDan.php
M	content/apps/market/classes/Factory.php
M	content/apps/market/classes/Prize/MarketActivity.php
M	content/apps/market/classes/Prize/PrizeType.php
M	content/apps/market/configs/package.php
M	content/apps/market/mobile_prize.php
M	content/apps/market/platform.php
M	content/apps/market/platform_prize.php
M	content/apps/market/statics/platform-css/activity.css
A	content/apps/market/statics/platform-js/popover.js
M	content/apps/market/templates/platform/activity_prize_add.dwt.php
M	content/apps/market/templates/platform/prize_record.dwt.php
M	content/apps/merchant/classes/ecjia_merchant.class.php
M	content/apps/merchant/configs/package.php
M	content/apps/merchant/languages/zh_CN/merchant.lang.php
M	content/apps/merchant/mh_franchisee.php
M	content/apps/merchant/statics/ecjia/ecjia-merchant-ui.js
M	content/apps/merchant/statics/js/merchant_info.js
M	content/apps/merchant/templates/merchant/merchant_edit.dwt.php
M	content/apps/merchant/templates/merchant/merchant_info.dwt.php
M	content/apps/mobile/classes/Qrcode/AbstractQrcode.php
M	content/apps/mobile/configs/package.php
M	content/apps/orders/configs/package.php
M	content/apps/orders/modules/admin/orders/list_module.class.php
A	content/apps/orders/modules/admin/user/merchant/order/list_module.class.php
M	content/apps/platform/admin_plugin.php
M	content/apps/platform/classes/Frameworks/Platform/Account.php
A	content/apps/platform/classes/Frameworks/Platform/AccountID.php
M	content/apps/platform/classes/Plugin/PlatformAbstract.php
M	content/apps/platform/configs/package.php
M	content/apps/platform/statics/platform/css/ecjia.function.css
M	content/apps/platform/statics/platform/js/core/app.js
M	content/apps/platform/templates/admin/extend_edit.dwt.php
M	content/apps/quickpay/configs/package.php
M	content/apps/quickpay/modules/flow/checkOrder_module.class.php
M	content/apps/setting/configs/package.php
M	content/apps/setting/modules/shop/config_module.class.php
M	content/apps/setting/modules/shop/region_module.class.php
M	content/apps/staff/configs/package.php
M	content/apps/staff/modules/v2/admin/user/signin_module.class.php
M	content/apps/store/admin_preaudit.php
M	content/apps/store/configs/package.php
M	content/apps/store/languages/zh_CN/store.lang.php
M	content/apps/store/templates/admin/store_auth.dwt.php
M	content/apps/store/templates/admin/store_lock.dwt.php
M	content/apps/store/templates/admin/store_preaudit_check.dwt.php
M	content/apps/touch/classes/ecjia_touch_api.class.php
M	content/apps/touch/classes/ecjia_touch_manager.class.php
M	content/apps/touch/classes/ecjia_touch_user.class.php
M	content/apps/touch/classes/hooks/merchant_touch.class.php
M	content/apps/touch/configs/package.php
A	content/apps/user/apis/user_store_user_list_api.class.php
A	content/apps/user/classes/user_account.class.php
M	content/apps/user/configs/package.php
M	content/apps/user/functions/admin_user.func.php
M	content/apps/user/mobile_reward.php
A	content/apps/user/modules/admin/merchant/user/list_module.class.php
A	content/apps/user/modules/admin/user/account/deposit_module.class.php
A	content/apps/user/modules/admin/user/account/pay_module.class.php
A	content/apps/user/modules/admin/user/add_module.class.php
M	content/apps/user/modules/user/account/cancel_module.class.php
M	content/apps/user/modules/user/account/raply_module.class.php
M	content/apps/user/modules/user/bind_module.class.php
M	content/apps/wechat/classes/Handlers/WechatSubscribeHandler.php
A	content/apps/wechat/classes/WechatID.php
M	content/apps/wechat/classes/WechatQrcode.php
M	content/apps/wechat/classes/WechatUUID.php
M	content/apps/wechat/classes/WechatUser.php
M	content/apps/wechat/configs/package.php
M	content/apps/wechat/templates/front/bind_enter_code.dwt.php
M	content/configs/api.php
M	content/configs/app.php
M	content/configs/facade.php
M	content/configs/namespaces.php
M	content/configs/provider.php
M	content/configs/release.php
A	content/database/migrations/2018_08_09_145044_add_id_to_market_activity_lottery.php
A	content/database/migrations/2018_08_10_141349_create_goodslib_table.php
A	content/database/migrations/2018_08_10_141411_create_goodslib_attr_table.php
A	content/database/migrations/2018_08_10_141443_create_goodslib_gallery_table.php
A	content/database/migrations/2018_08_10_141509_create_goodslib_products_table.php
A	content/database/migrations/2018_08_10_141644_add_goodslib_id_to_goods.php
A	content/database/patchs/v1.19.0/Version_11900.php
A	content/database/patchs/v1.19.0/readme.txt
M	content/plugins/mp_dzp/init_action.php
M	content/plugins/mp_dzp/mp_dzp.php
M	content/plugins/mp_dzp/templates/dzp_index.dwt.php
M	content/plugins/mp_ggk/init_action.php
M	content/plugins/mp_ggk/mp_ggk.php
M	content/plugins/mp_ggk/templates/ggk_index.dwt.php
M	content/plugins/mp_goods/mp_goods.class.php
M	content/plugins/mp_goods/mp_goods.php
M	content/plugins/mp_zjd/init_action.php
M	content/plugins/mp_zjd/mp_zjd.php
M	content/plugins/mp_zjd/templates/zjd_index.dwt.php
M	content/system/classes/BaseController/EcjiaController.php
M	content/system/classes/Sessions/Handler/MemcacheSessionHandler.php
M	content/system/classes/ecjia.class.php
M	content/system/statics/lib/smoke/smoke.js
M	content/system/statics/lib/smoke/smoke.min.js
A	sites/api/content/configs/session.php
A	sites/m/content/configs/session.php
M	sites/m/content/themes/h5/affiliate_invite_register.dwt.php
M	sites/m/content/themes/h5/css/ecjia_city.css
M	sites/m/content/themes/h5/extras/classes/utility/touch_function.class.php
M	sites/m/content/themes/h5/extras/classes/utility/user_function.class.php
M	sites/m/content/themes/h5/extras/configs/route.php
M	sites/m/content/themes/h5/extras/controller/affiliate_controller.php
M	sites/m/content/themes/h5/extras/controller/article_controller.php
M	sites/m/content/themes/h5/extras/controller/cart_controller.php
M	sites/m/content/themes/h5/extras/controller/connect_controller.php
M	sites/m/content/themes/h5/extras/controller/franchisee_controller.php
M	sites/m/content/themes/h5/extras/controller/quickpay_controller.php
M	sites/m/content/themes/h5/extras/controller/user_account_controller.php
M	sites/m/content/themes/h5/extras/controller/user_address_controller.php
M	sites/m/content/themes/h5/extras/controller/user_bonus_controller.php
M	sites/m/content/themes/h5/extras/controller/user_controller.php
M	sites/m/content/themes/h5/extras/controller/user_get_password_controller.php
M	sites/m/content/themes/h5/extras/controller/user_order_controller.php
M	sites/m/content/themes/h5/extras/controller/user_privilege_controller.php
M	sites/m/content/themes/h5/extras/controller/user_profile_controller.php
M	sites/m/content/themes/h5/functions.php
A	sites/m/content/themes/h5/images/wallet/6.png
A	sites/m/content/themes/h5/images/wallet/bonus_error.png
A	sites/m/content/themes/h5/images/wallet/bonus_image.png
A	sites/m/content/themes/h5/images/wallet/bonus_success.png
M	sites/m/content/themes/h5/js/ecjia.touch.js
M	sites/m/content/themes/h5/js/ecjia.touch.quickpay.js
M	sites/m/content/themes/h5/js/ecjia.touch.user_account.js
A	sites/m/content/themes/h5/library/ecjia_bonus_modal.lbi.php
M	sites/m/content/themes/h5/style.css
M	sites/m/content/themes/h5/user_account_detail.dwt.php
A	sites/m/content/themes/h5/user_add_bonus.dwt.php
M	sites/m/content/themes/h5/user_enter_code.dwt.php
M	sites/m/content/themes/h5/user_record.dwt.php
M	sites/merchant/content/configs/merchant.php
M	sites/merchant/content/configs/session.php
M	vendor/composer/autoload_namespaces.php
M	vendor/royalcms/app/Royalcms/Component/App/AppControllerDispatcher.php
M	vendor/royalcms/app/Royalcms/Component/App/AppManager.php
A	vendor/royalcms/class-loader/Royalcms/Component/ClassLoader/AliasLoader.php
A	vendor/royalcms/class-loader/Royalcms/Component/ClassLoader/AliasManager.php
A	vendor/royalcms/class-loader/Royalcms/Component/ClassLoader/ClassLoader.php
A	vendor/royalcms/class-loader/Royalcms/Component/ClassLoader/ClassManager.php
M	vendor/royalcms/default-route/Royalcms/Component/DefaultRoute/DefaultRouteServiceProvider.php
A	vendor/royalcms/editor/Royalcms/Component/Editor/Editor.php
A	vendor/royalcms/editor/Royalcms/Component/Editor/Quicktags.php
A	vendor/royalcms/editor/Royalcms/Component/Editor/Tinymce.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/AliasLoader.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/AliasManager.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/ClassLoader.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/ClassManager.php
M	vendor/royalcms/framework/Royalcms/Component/Config/Resources/coreservice.php
M	vendor/royalcms/framework/Royalcms/Component/Config/Resources/route.php
M	vendor/royalcms/framework/Royalcms/Component/Database/Schema/Grammars/MySqlGrammar.php
D	vendor/royalcms/framework/Royalcms/Component/Editor/Editor.php
D	vendor/royalcms/framework/Royalcms/Component/Editor/Quicktags.php
D	vendor/royalcms/framework/Royalcms/Component/Editor/Tinymce.php
M	vendor/royalcms/framework/Royalcms/Component/Foundation/Royalcms.php
D	vendor/royalcms/framework/Royalcms/Component/ImageEditor/Editor.php
D	vendor/royalcms/framework/Royalcms/Component/ImageEditor/Gd.php
D	vendor/royalcms/framework/Royalcms/Component/ImageEditor/Imagick.php
D	vendor/royalcms/framework/Royalcms/Component/Page/Default.php
D	vendor/royalcms/framework/Royalcms/Component/Page/Page.php
M	vendor/royalcms/framework/Royalcms/Component/Session/StartSession.php
M	vendor/royalcms/framework/Royalcms/Component/Session/Store.php
D	vendor/royalcms/framework/Royalcms/Component/Widget/Control.php
D	vendor/royalcms/framework/Royalcms/Component/Widget/Factory.php
D	vendor/royalcms/framework/Royalcms/Component/Widget/Widget.php
A	vendor/royalcms/image-editor/Royalcms/Component/ImageEditor/Editor.php
A	vendor/royalcms/image-editor/Royalcms/Component/ImageEditor/GD.php
A	vendor/royalcms/image-editor/Royalcms/Component/ImageEditor/Imagick.php
M	vendor/royalcms/native-session/Royalcms/Component/NativeSession/Store.php
A	vendor/royalcms/page/Royalcms/Component/Page/Contracts/Presenter.php
A	vendor/royalcms/page/Royalcms/Component/Page/DefaultPage.php
A	vendor/royalcms/page/Royalcms/Component/Page/Page.php
M	vendor/royalcms/wechat-user/Royalcms/Component/WeChat/User/User.php
M	vendor/royalcms/wechat/Royalcms/Component/WeChat/Foundation/WeChat.php
A	vendor/royalcms/widget/Royalcms/Component/Widget/Factory.php
A	vendor/royalcms/widget/Royalcms/Component/Widget/Widget.php
A	vendor/royalcms/widget/Royalcms/Component/Widget/WidgetController.php

需要手动删除的文件

D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/AliasLoader.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/AliasManager.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/ClassLoader.php
D	vendor/royalcms/framework/Royalcms/Component/ClassLoader/ClassManager.php
D	vendor/royalcms/framework/Royalcms/Component/Editor/Editor.php
D	vendor/royalcms/framework/Royalcms/Component/Editor/Quicktags.php
D	vendor/royalcms/framework/Royalcms/Component/Editor/Tinymce.php
D	vendor/royalcms/framework/Royalcms/Component/ImageEditor/Editor.php
D	vendor/royalcms/framework/Royalcms/Component/ImageEditor/Gd.php
D	vendor/royalcms/framework/Royalcms/Component/ImageEditor/Imagick.php
D	vendor/royalcms/framework/Royalcms/Component/Page/Default.php
D	vendor/royalcms/framework/Royalcms/Component/Page/Page.php
D	vendor/royalcms/framework/Royalcms/Component/Widget/Control.php
D	vendor/royalcms/framework/Royalcms/Component/Widget/Factory.php
D	vendor/royalcms/framework/Royalcms/Component/Widget/Widget.php


ECJia到家升级教程

完整包升级与补丁包升级区别

  • 程序没有二开的情况下建议使用完整包升级,程序进行二开后需使用补丁包升级,以免二开内容被覆盖
  • 程序升级不会影响原有数据
  • 使用完整包进行升级可以跨版本升级,使用补丁包升级必须依次升级
  • 补丁包下载地址(页面最下方):https://www.ecjia.com/download.html

授权插件注意事项

  • 升级完成后,需要重新上传插件,否则系统会报错,无法正常使用

升级的时候覆盖与删除替换的区别

举例:到家程序共有A、B、C三个文件、文件夹

  • 覆盖文件:A、B、C三个文件,上传新版本的A、B直接覆盖,会得到A、B、C
  • 删除后上传新文件: A、B、C三个文件,先删除然后上传新版本的A、B就会得到A、B
  • 在新版本中C文件已经被删除,使用覆盖文件操作升级的话C文件还存在,当程序运行的时候可能会导致异常,所以请按照升级文档,删除旧版本到家文件后,再上传新版本到家文件

升级注意事项

  • 本次升级【工具】-【运维工具】下新增2个工具:更新数据库结构、微信粉丝用户头像更换HTTPS。
  • 到家 1.16.0 开始支持 PHP7.2,大家可以积极测试(请勿在正式环境部署),反馈一下在 PHP7.2 上运行的 bug,帮助我们更好地成长。查看错误日志方法: ECJia到家如何查看错误日志
  • 后续版本将陆续不支持PHP5.4,请将快升级PHP版本,性能更好、更安全。
  • 更新或者安装完成后,切记设置经营城市,否则无法正常使用:平台后台-商家管理-经营城市,记得设置城市别名,才能够正常显示
  • 跟新完成后请务必清除浏览器缓存与模板缓存,可以手动删除缓存文件,在到家目录 content/storages 下,删除图中的7个文件夹
Version deleteCache.png