Commit 72ba8ea5 authored by zhz's avatar zhz

Merge branch 'master_dev' of git.shenbd.com:qm-develop/shenbd into master_dev

parents 5eeffc80 5e17f6e5
...@@ -121,7 +121,7 @@ class CartController extends \Our\Controller_AbstractApi{ ...@@ -121,7 +121,7 @@ class CartController extends \Our\Controller_AbstractApi{
$storeCartData = $cartService->getDeliveryTypeForCart($address,$storeCartData); $storeCartData = $cartService->getDeliveryTypeForCart($address,$storeCartData);
$data = $cartService->getFormatCartListForOrder($storeCartData,$address); $data = $cartService->getFormatCartListForOrder($storeCartData,$address);
$this->success($data); $this->success($data);
} }
/** /**
......
...@@ -24,7 +24,7 @@ class Pay { ...@@ -24,7 +24,7 @@ class Pay {
$this->channel = $data['channel']; $this->channel = $data['channel'];
$this->paySn = $data['paySn']; $this->paySn = $data['paySn'];
$this->requestData = $data; $this->requestData = $data;
$this->member = \DAO\MemberModel::getInstance()->find($this->memberId); $this->member = \DAO\MemberModel::getInstance()->getInfo($this->memberId);
$return = array(); $return = array();
$orderInfo = $this->getOrder(); $orderInfo = $this->getOrder();
if($data['channel'] == \Our\NameConst::wxAppChannel){ if($data['channel'] == \Our\NameConst::wxAppChannel){
......
...@@ -35,10 +35,9 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -35,10 +35,9 @@ class CartServiceModel extends \Business\AbstractModel{
\Error\ErrorModel::throwException(\Error\CodeConfigModel::addCartFailed); \Error\ErrorModel::throwException(\Error\CodeConfigModel::addCartFailed);
} }
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis = \Redis\Db7\CartRedisModel::getInstance(); $cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis->tableDel($memberCartKey); $cartRedis->tableDel($memberCartKey);
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
foreach($cartArray['storeIds'] as $storeId){ foreach($cartArray['storeIds'] as $storeId){
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId; $memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId;
$cartRedis->tableDel($memberStoreCartsKey); $cartRedis->tableDel($memberStoreCartsKey);
...@@ -56,13 +55,18 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -56,13 +55,18 @@ class CartServiceModel extends \Business\AbstractModel{
*/ */
public function editCart($data,$cart,$memberId,$pBundlind=null){ public function editCart($data,$cart,$memberId,$pBundlind=null){
$validReturnData = $this->validEditCart($data,$cart,$memberId,$pBundlind); $validReturnData = $this->validEditCart($data,$cart,$memberId,$pBundlind);
$cartDao = \DAO\Cart\CartModel::getInstance(\Our\DbNameConst::masterDBConnectName); if(isset($validReturnData['existCartFlag'])&&$validReturnData['existCartFlag']==\Our\ApiConst::one){
return $this->editDelCart($cart,$memberId);
}
$cartArray = $this->getFormattedCartDataForEdit($data,$cart,$memberId,$pBundlind,$validReturnData); $cartArray = $this->getFormattedCartDataForEdit($data,$cart,$memberId,$pBundlind,$validReturnData);
$cartDao = \DAO\Cart\CartModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$result = $cartDao->update($cartArray['newCarts'][0],array('cart_id'=>$data['cartId'])); $result = $cartDao->update($cartArray['newCarts'][0],array('cart_id'=>$data['cartId']));
if(!$result){ if(!$result){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::editCartFailed); \Error\ErrorModel::throwException(\Error\CodeConfigModel::editCartFailed);
} }
$cartRedis = \Redis\Db7\CartRedisModel::getInstance(); $cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis->tableDel($memberCartKey);
foreach($cartArray['storeIds'] as $storeId){ foreach($cartArray['storeIds'] as $storeId){
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId; $memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId;
$cartRedis->tableDel($memberStoreCartsKey); $cartRedis->tableDel($memberStoreCartsKey);
...@@ -73,6 +77,32 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -73,6 +77,32 @@ class CartServiceModel extends \Business\AbstractModel{
return $result; return $result;
} }
/**
* 编辑规格时出现当前规格已经在购物车时,删除当前购物车
* @param $cart
* @param $memberId
* @return mixed
* @throws \Error\OurExceptionModel
* @throws \Exception
*/
public function editDelCart($cart,$memberId){
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartDao = \DAO\Cart\CartModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$result = $cartDao->del(array('cart_id'=>$cart['cart_id']));
if(!$result){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::editDelCartFailed);
}
$updateResult = $cartDao->update(array('gmt_update'=>TIMESTAMP),array('goods_id'=>$cart['goods_id'],'buyer_id'=>$memberId));
if($updateResult===false){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::editCartUploadCartFailed);
}
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis->tableDel($memberCartKey);
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cart['store_id'];
$cartRedis->tableDel($memberStoreCartsKey);
return $result;
}
/** /**
* 批量删除购物车 * 批量删除购物车
* @param $data * @param $data
...@@ -93,13 +123,11 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -93,13 +123,11 @@ class CartServiceModel extends \Business\AbstractModel{
\Error\ErrorModel::throwException(\Error\CodeConfigModel::editCartFailed); \Error\ErrorModel::throwException(\Error\CodeConfigModel::editCartFailed);
} }
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis = \Redis\Db7\CartRedisModel::getInstance(); $cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis->tableDel($memberCartKey); $cartRedis->tableDel($memberCartKey);
foreach($cartList as $cart){ foreach($cartList as $cart){
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cart['store_id']; $memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cart['store_id'];
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartRedis->tableDel($memberStoreCartsKey); $cartRedis->tableDel($memberStoreCartsKey);
} }
return $result; return $result;
...@@ -140,7 +168,6 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -140,7 +168,6 @@ class CartServiceModel extends \Business\AbstractModel{
$cartRedis->tableDel($memberStoreCartsKey); $cartRedis->tableDel($memberStoreCartsKey);
$memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId; $memberCartKey = \Our\NameConst::memberCartStorePrefix.$memberId;
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartRedis->tableDel($memberCartKey); $cartRedis->tableDel($memberCartKey);
return $result; return $result;
} }
...@@ -358,6 +385,11 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -358,6 +385,11 @@ class CartServiceModel extends \Business\AbstractModel{
if(!(isset($data['goodsNum'])&&intval($data['goodsNum'])>\Our\ApiConst::zero)){ if(!(isset($data['goodsNum'])&&intval($data['goodsNum'])>\Our\ApiConst::zero)){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyCartGoodsNum); \Error\ErrorModel::throwException(\Error\CodeConfigModel::emptyCartGoodsNum);
} }
$cartDao = \DAO\Cart\CartModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$existCart = $cartDao->find(array('goods_id'=>$data['goodsId'],'buyer_id'=>$memberId,'cart_id'=>array('neq',$cart['cart_id'])));
if($existCart){
return array('existCartFlag'=>\Our\ApiConst::one);
}
$goodsDao = \DAO\GoodsModel::getInstance(\Our\DbNameConst::masterDBConnectName); $goodsDao = \DAO\GoodsModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$goodsValidStatus = $goodsDao->validEditCartGoods($data,$cart); $goodsValidStatus = $goodsDao->validEditCartGoods($data,$cart);
if(!$goodsValidStatus){ if(!$goodsValidStatus){
...@@ -501,7 +533,6 @@ class CartServiceModel extends \Business\AbstractModel{ ...@@ -501,7 +533,6 @@ class CartServiceModel extends \Business\AbstractModel{
$FavoritesInstance = \DAO\FavoritesModel::getInstance(); $FavoritesInstance = \DAO\FavoritesModel::getInstance();
foreach($cartList as $cart){ foreach($cartList as $cart){
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cart['store_id']; $memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$cart['store_id'];
$cartRedis = \Redis\Db7\CartRedisModel::getInstance();
$cartRedis->tableDel($memberStoreCartsKey); $cartRedis->tableDel($memberStoreCartsKey);
\Our\RedisHelper::delCachedFunction(\Redis\Db4\FavoritesRedisModel::getInstance(),array(&$FavoritesInstance, 'getOne'),array('*',array('member_id'=>$memberId,'goods_commonid'=>$cart['goods_commonid'])),array($memberId)); \Our\RedisHelper::delCachedFunction(\Redis\Db4\FavoritesRedisModel::getInstance(),array(&$FavoritesInstance, 'getOne'),array('*',array('member_id'=>$memberId,'goods_commonid'=>$cart['goods_commonid'])),array($memberId));
} }
......
...@@ -189,16 +189,36 @@ class GroupSaleServiceModel extends \Business\AbstractModel { ...@@ -189,16 +189,36 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
} }
$tempObj['goodsAttr'] = $goodsDao->getFormatGoodsAttr($tempCart['goods_spec']); $tempObj['goodsAttr'] = $goodsDao->getFormatGoodsAttr($tempCart['goods_spec']);
$tempObj['goodsMid'] = $tempCart['goods_mid']; $tempObj['goodsMid'] = $tempCart['goods_mid'];
$storeCarts[] = $tempObj; array_push($storeCarts,$tempObj);
} }
} }
if(isset($storeCarts)&&count($storeCarts)>\Our\ApiConst::zero){ if(isset($storeCarts)&&count($storeCarts)>\Our\ApiConst::zero){
$offlineCarts = array();
$newstoreCarts= array();
foreach ($storeCarts as $row){
if($row['goodsState']==\Our\ApiConst::cartGoodsOnline){
array_push($newstoreCarts,$row);
}else{
$offlineCarts[] = $row;
}
}
if($offlineCarts){
foreach($offlineCarts as $key=>$cartObj){
$goodsState[$key] = $cartObj['goodsState'];
}
array_multisort($goodsState, SORT_DESC, $offlineCarts);
foreach($offlineCarts as $tempCartObj){
array_push($newstoreCarts,$tempCartObj);
}
}
$storeCarts = $newstoreCarts;
$store = $storeDao->get($storeId,false); $store = $storeDao->get($storeId,false);
$temp = array();
$temp['storeName'] = $store['store_name']; $temp['storeName'] = $store['store_name'];
$temp['storeId'] = $storeId; $temp['storeId'] = $storeId;
$temp['storeCarts'] = $storeCarts; $temp['storeCarts'] = $storeCarts;
$temp['inAreaFlag'] = $storeDao->checkAddressInServiceArea($address,$store); $temp['inAreaFlag'] = $storeDao->checkAddressInServiceArea($address,$store);
$result[]=$temp; $result[$storeId]=$temp;
$memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId; $memberStoreCartsKey = \Our\NameConst::memberStoreCartsPrefix.$memberId.\Our\NameConst::underline.$storeId;
$cartRedis->update($memberStoreCartsKey,$temp,\Our\ApiConst::oneHour); $cartRedis->update($memberStoreCartsKey,$temp,\Our\ApiConst::oneHour);
} }
...@@ -209,11 +229,17 @@ class GroupSaleServiceModel extends \Business\AbstractModel { ...@@ -209,11 +229,17 @@ class GroupSaleServiceModel extends \Business\AbstractModel {
unset($tempReturnStoreCartsObj['goodsCommonPrices']); unset($tempReturnStoreCartsObj['goodsCommonPrices']);
unset($tempReturnStoreCartsObj['is_transport']); unset($tempReturnStoreCartsObj['is_transport']);
unset($tempReturnStoreCartsObj['transport_id']); unset($tempReturnStoreCartsObj['transport_id']);
$result[]=$tempReturnStoreCartsObj; $result[$storeId]=$tempReturnStoreCartsObj;
} }
} }
if($result){ if($result){
return array('totalCount'=>count($storeCartList),'list'=>$result); $storeIds = $cartListData['storeIds'];
$newResult = array();
foreach($storeIds as $key){
$newResult[] = $result[$key];
}
return array('totalCount'=>count($storeCartList),'list'=>$newResult);
} }
return array('totalCount'=>\Our\ApiConst::zero,'list'=>array()); return array('totalCount'=>\Our\ApiConst::zero,'list'=>array());
} }
......
...@@ -567,12 +567,12 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -567,12 +567,12 @@ class MemberServiceModel extends \Business\AbstractModel
return false; return false;
} }
$memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName); $memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$existMember = $memberDao->find($memberMapping['member_id']); $existMember = $memberDao->getInfo($memberMapping['member_id']);
if(!$existMember){ if(!$existMember){
$memberMappingDao->del(array('id'=>$memberMapping['id'])); $memberMappingDao->del(array('id'=>$memberMapping['id']));
return false; return false;
} }
if($existMember['member_mobile']&&$existMember['member_mobile_bind']){ if($existMember['memberMobile']&&$existMember['memberMobileBind']){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::registerMemberInfoFailed); \Error\ErrorModel::throwException(\Error\CodeConfigModel::registerMemberInfoFailed);
} }
$member['member_mobile'] = $where['mobile']; $member['member_mobile'] = $where['mobile'];
......
...@@ -40,6 +40,9 @@ class CartModel extends \DAO\AbstractModel{ ...@@ -40,6 +40,9 @@ class CartModel extends \DAO\AbstractModel{
*/ */
public function find($where,$field= \Our\NameConst::allField){ public function find($where,$field= \Our\NameConst::allField){
$this->setDb($this->dbName); $this->setDb($this->dbName);
if(is_array($where)){
$where = $this->db->getSqlWhereByArray($where);
}
$data = $this->db->from($this->_tableName)->select($field)->where($where)->fetchOne(); $data = $this->db->from($this->_tableName)->select($field)->where($where)->fetchOne();
return $data; return $data;
} }
...@@ -210,7 +213,8 @@ class CartModel extends \DAO\AbstractModel{ ...@@ -210,7 +213,8 @@ class CartModel extends \DAO\AbstractModel{
'goodsIds'=>$goodsIds, 'goodsIds'=>$goodsIds,
'goodsCommonIds'=>$goodsCommonIds, 'goodsCommonIds'=>$goodsCommonIds,
'blIds'=>$blIds, 'blIds'=>$blIds,
'cartList'=>$storeCartList 'cartList'=>$storeCartList,
'storeIds'=>$storeIds
); );
} }
......
...@@ -26,30 +26,6 @@ class MemberModel extends \DAO\AbstractModel ...@@ -26,30 +26,6 @@ class MemberModel extends \DAO\AbstractModel
$this->memberMysql = \Mysql\MemberModel::getInstance(); $this->memberMysql = \Mysql\MemberModel::getInstance();
} }
/**
* 根据用户编号查找数据
*
* @param int $userId
* @return array
*/
public function find($userId)
{
$redis = \Redis\Db0\MemberRedisModel::getInstance();
$user = $redis->find($userId);
if (!$user) {
$this->setDb($this->dbName);
$user = $this->db->select(\Our\NameConst::allField)->from($this->_tableName)->where(array('member_id' => $userId))->fetchOne();
//$mysql = \Mysql\MemberModel::getInstance();
//$user = $mysql->find($userId);
if ($user) {
$memberAvatarUrl = $this->getMemberAvatarUrl($user['member_id'], $user['member_avatar']);
$user['memberAvatarUrl'] = $memberAvatarUrl;
$redis->update($userId, $user);
}
}
return $user;
}
/** /**
* 获取会员头像 * 获取会员头像
......
...@@ -163,6 +163,8 @@ class CodeConfigModel { ...@@ -163,6 +163,8 @@ class CodeConfigModel {
const emptyPBundlingdForOrder = 50038; const emptyPBundlingdForOrder = 50038;
const pBundlingOfflineForOrder = 50039; const pBundlingOfflineForOrder = 50039;
const pBundlingNoStorageForOrder = 50040; const pBundlingNoStorageForOrder = 50040;
const editDelCartFailed = 50041;
const editCartUploadCartFailed = 50042;
//订单相关错误码 //订单相关错误码
...@@ -553,6 +555,8 @@ class CodeConfigModel { ...@@ -553,6 +555,8 @@ class CodeConfigModel {
self::emptyPBundlingdForOrder => '组合销售商品不存在', self::emptyPBundlingdForOrder => '组合销售商品不存在',
self::pBundlingOfflineForOrder => '组合销售商品已经下架', self::pBundlingOfflineForOrder => '组合销售商品已经下架',
self::pBundlingNoStorageForOrder => '组合销售商品库存不足', self::pBundlingNoStorageForOrder => '组合销售商品库存不足',
self::editDelCartFailed => '编辑购物车时删除数据失败',
self::editCartUploadCartFailed => '编辑购物车更新购物车时间失败',
self::addressNotExist=>'地址不存在', self::addressNotExist=>'地址不存在',
self::emptyAddressId=>'地址主键参数不能为空', self::emptyAddressId=>'地址主键参数不能为空',
......
...@@ -12,7 +12,47 @@ application.dispatcher.catchException = true ...@@ -12,7 +12,47 @@ application.dispatcher.catchException = true
; Admin模块用于后台管理 ; Admin模块用于后台管理
application.modules = Index,Api,Admin application.modules = Index,Api,Admin
[productone : common]
; 数据库配置
resources.database.params.driver = "pdo_mysql"
resources.database.params.hostname = "172.16.142.15"
resources.database.params.port = 3306
resources.database.params.database = "qmcs"
resources.database.params.username = "root"
resources.database.params.password = "!@#$%12345werty"
resources.database.params.charset = "UTF8"
resources.database.params.driver_options.1002 = "SET NAMES utf8"
;
; ; 从库配置
resources.database.slave.params.driver = "pdo_mysql"
resources.database.slave.params.hostname = "172.16.142.15"
resources.database.slave.params.port = 3306
resources.database.slave.params.database = "qmcs"
resources.database.slave.params.username = "root"
resources.database.slave.params.password = "!@#$%12345werty"
resources.database.slave.params.charset = "UTF8"
resources.database.slave.params.driver_options.1002 = "SET NAMES utf8"
;
redis.database.params.host = "172.16.142.15"
redis.database.params.port = "6379"
redis.database.params.prefix = "qm_"
; ;redis.database.params.password = "23456ertyu"
out.config="/data/config"
;
; ; 锁文件
out.locks="/data/locks";
; ; redis配置
;
;redis.database.params.password = "test"
; ;推送配置
push.clientHost="wss://api.shenbd.com/wss"
push.host="172.16.142.15"
push.port="9503"
push.open=1
;
elastic.master.host="172.16.142.15"
elastic.master.port="9200"
elastic.master.scheme="http";
//生产环境 //生产环境
......
[common] [common]
; 通用配置 ; 通用配置
[productone : common]
; 测试环境配置
;
; ; url相关配置
; ; 开发环境配置
config.url.convert=/usr/local/bin/wkhtmltoimage
; ; url相关配置
config.url.resourcesHost = "http://api.shenbd.com"
; ; 用户中心host
config.url.userHost = ""
;
; ; oss 域名
config.url.ossHost = "https://qmoss-01.oss-cn-hangzhou.aliyuncs.com"
;
; ;推送域名
config.url.pushHost="172.16.142.15:9503";
config.url.indexUrl="/alidata/www/api.shenbd.com/application/library/React"
config.url.libary="/alidata/www/api.shenbd.com/application/library"
[product : common] [product : common]
; 测试环境配置 ; 测试环境配置
......
<?php <?php
echo 1;exit;
echo unserialize('a:5:{i:1064;a:3:{s:4:\"gcId\";i:1064;s:6:\"gcName\";s:6:\"\xe5\x9b\xbe\xe4\xb9\xa6\";s:7:\"gcImage\";s:79:\"https://qmoss-01.oss-cn-hangzhou.aliyuncs.com/mall/common/category-pic-1064.jpg\";}i:1153;a:3:{s:4:\"gcId\";i:1153;s:6:\"gcName\";s:6:\"\xe6\x9c\x8d\xe8\xa3\x85\";s:7:\"gcImage\";s:79:\"https://qmoss-01.oss-cn-hangzhou.aliyuncs.com/mall/common/category-pic-1153.jpg\";}i:1212;a:3:{s:4:\"gcId\";i:1212;s:6:\"gcName\";s:6:\"\xe7\x94\x9f\xe9\xb2\x9c\";s:7:\"gcImage\";s:79:\"https://qmoss-01.oss-cn-hangzhou.aliyuncs.com/mall/common/category-pic-1212.jpg\";}i:1233;a:3:{s:4:\"gcId\";i:1233;s:6:\"gcName\";s:6:\"\xe7\xae\xb1\xe5\x8c\x85\";s:7:\"gcImage\";s:79:\"https://qmoss-01.oss-cn-hangzhou.aliyuncs.com/mall/common/category-pic-1233.jpg\";}i:1244;a:3:{s:4:\"gcId\";i:1244;s:6:\"gcName\";s:12:\"\xe7\xbe\x8e\xe5\xa6\x86\xe7\xbe\x8e\xe6\x8a\xa4\";s:7:\"gcImage\";s:79:\"https://qmoss-01.oss-cn-hangzhou.aliyuncs.com/mall/common/category-pic-1244.jpg\";}}');exit;
echo 24234;exit;
$redis =new Redis(); $redis =new Redis();
$redis->connect('127.0.0.1','6379'); $redis->connect('127.0.0.1','6379');
$redis->rPush('test',0); $redis->rPush('test',0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment