'ets_rv_reply_comment', 'primary' => 'id_ets_rv_reply_comment', 'multilang' => true, 'fields' => array( 'id_ets_rv_comment' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'id_customer' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), 'employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'validate' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'question' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), 'date_add' => array('type' => self::TYPE_DATE), 'upd_date' => array('type' => self::TYPE_DATE), //Lang fields. 'content' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),//, 'size' => 65535 ), ); public static function notApprove($question = 0) { if (!Validate::isBool($question)) return 0; $dq = new DbQuery(); $dq ->select('COUNT(id_ets_rv_reply_comment)') ->from('ets_rv_reply_comment') ->where('validate=0') ->where('question=' . (int)$question); return (int)Db::getInstance()->getValue($dq); } public static function getStatusById($id) { if (!$id || !Validate::isUnsignedInt($id) ) { return 0; } $db = new DbQuery(); $db ->select('validate') ->from('ets_rv_reply_comment') ->where('id_ets_rv_reply_comment=' . (int)$id); return Db::getInstance()->getValue($db); } public static function findOneById($id) { return (int)Db::getInstance()->getValue('SELECT id_ets_rv_reply_comment FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment` WHERE id_ets_rv_reply_comment=' . (int)$id); } public static function getInstanceById($id) { return new self($id); } public function toArray($usefulness = false) { $usefulnessInfos = $this->id && $usefulness ? EtsRVReplyCommentRepository::getInstance()->getReplyCommentUsefulness($this->id, $this->question) : array(); return [ 'id_ets_rv_reply_comment' => $this->id, 'id_ets_rv_comment' => $this->id_ets_rv_comment, 'id_customer' => $this->id_customer, 'date_add' => $this->date_add, 'upd_date' => $this->upd_date, 'usefulness' => !empty($usefulnessInfos['usefulness']) ? (int)$usefulnessInfos['usefulness'] : 0, 'total_usefulness' => !empty($usefulnessInfos['total_usefulness']) ? (int)$usefulnessInfos['total_usefulness'] : 0, 'employee' => $this->employee, 'question' => $this->question, 'validate' => $this->validate ]; } public static function getProductCommentById($id) { if (!$id || !Validate::isUnsignedInt($id) ) { return false; } $dq = new DbQuery(); $dq->select('ppc.id_ets_rv_product_comment') ->from('ets_rv_reply_comment', 'pc') ->leftJoin('ets_rv_comment', 'pcc', 'pc.id_ets_rv_comment = pcc.id_ets_rv_comment') ->leftJoin('ets_rv_product_comment', 'ppc', 'pcc.id_ets_rv_product_comment = ppc.id_ets_rv_product_comment') ->where('pc.id_ets_rv_reply_comment=' . (int)$id); $id_product_comment = (int)Db::getInstance()->getValue($dq); if ($id_product_comment) return new EtsRVProductComment((int)$id_product_comment); return 0; } public static function getData($id, $idLang, $onlyId = false) { if (!$id || !Validate::isUnsignedInt($id) || !$onlyId && (!$idLang || !Validate::isUnsignedInt($idLang)) ) { return false; } $multiLang = (int)Configuration::get('ETS_RV_MULTILANG_ENABLED'); $dq = new DbQuery(); $dq ->select('pc.id_ets_rv_comment, pc.id_customer, pc.employee, pc.question, pcc.id_ets_rv_product_comment, pc.validate, pcc.answer') ->select('ppc.id_product') ->from('ets_rv_reply_comment', 'pc'); if (!$onlyId) { $dq ->select('IF(' . $multiLang . ' != 0 AND pcl.`content` != "" AND pcl.`content` is NOT NULL, pcl.`content`, pol.`content`) content') ->leftJoin('ets_rv_reply_comment_lang', 'pcl', 'pc.id_ets_rv_reply_comment = pcl.id_ets_rv_reply_comment AND pcl.id_lang = ' . (int)$idLang) ->leftJoin('ets_rv_reply_comment_origin_lang', 'pol', 'pc.id_ets_rv_reply_comment = pol.id_ets_rv_reply_comment'); } $dq ->leftJoin('ets_rv_comment', 'pcc', 'pc.id_ets_rv_comment = pcc.id_ets_rv_comment') ->leftJoin('ets_rv_product_comment', 'ppc', 'pcc.id_ets_rv_product_comment = ppc.id_ets_rv_product_comment') ->where('pc.id_ets_rv_reply_comment=' . (int)$id); return Db::getInstance()->getRow($dq); } public static function getCommentsNumber($ids) { if (!$ids || !Validate::isArrayWithIds($ids) ) { return false; } $dq = new DbQuery(); $dq ->select('COUNT(id_ets_rv_reply_comment)') ->from('ets_rv_reply_comment') ->where('validate=0') ->where('id_ets_rv_reply_comment IN (' . implode(',', $ids) . ')'); return (int)Db::getInstance()->getValue($dq); } public static function approveComments($ids = array()) { if (!$ids || !Validate::isArrayWithIds($ids) ) { return false; } return Db::getInstance()->execute(' UPDATE `' . _DB_PREFIX_ . 'ets_rv_reply_comment` SET validate=1 WHERE id_ets_rv_reply_comment IN (' . implode(',', $ids) . ') '); } public static function deleteComments($ids) { if (!$ids || !Validate::isArrayWithIds($ids) ) { return false; } return Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment` WHERE id_ets_rv_reply_comment IN (' . implode(',', $ids) . ')'); } public static function deleteAllChildren($ids) { if (!$ids || !Validate::isArrayWithIds($ids) ) { return false; } $tables = array( 'lang', 'report', 'usefulness', 'origin_lang', ); $res = true; foreach ($tables as $table) { $res &= Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_' . pSQL($table) . '` WHERE id_ets_rv_reply_comment IN (' . implode(',', $ids) . ');'); } return $res; } public function validate($validate = '1') { if (!Validate::isUnsignedId($this->id)) { return false; } $this->validate = $validate; Hook::exec('actionObjectProductCommentValidateAfter', array('object' => $this)); return $this->update(); } public function delete() { if (!parent::delete()) { return false; } return $this->deleteReports($this->id) && $this->deleteUsefulness($this->id) && $this->deleteOriginLang($this->id) && self::deleteActivity($this->id, 'reply_comment'); } public static function saveOriginLang($id_reply_comment, $id_lang, $content) { if (!Validate::isUnsignedId($id_reply_comment) || !Validate::isUnsignedId($id_lang)) { return false; }; if (($idLang = (int)Db::getInstance()->getValue('SELECT `id_lang` FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_origin_lang` WHERE id_ets_rv_reply_comment = ' . (int)$id_reply_comment))) { return Db::getInstance()->execute(' UPDATE `' . _DB_PREFIX_ . 'ets_rv_reply_comment_origin_lang` SET `content`="' . pSQL($content, true) . '", `id_lang`="' . (int)$id_lang . '" WHERE id_ets_rv_reply_comment = ' . (int)$id_reply_comment . ' '); } elseif (!$idLang) { return Db::getInstance()->execute(' INSERT INTO `' . _DB_PREFIX_ . 'ets_rv_reply_comment_origin_lang`( `id_ets_rv_reply_comment`, `id_lang`, `content` ) VALUES( ' . (int)$id_reply_comment . ', ' . (int)$id_lang . ', "' . pSQL($content, true) . '") '); } } public static function getOriginContentById($id_reply_comment) { if (!Validate::isUnsignedId($id_reply_comment)) { return false; } return Db::getInstance()->getValue('SELECT `content` FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_origin_lang` WHERE id_ets_rv_reply_comment = ' . (int)$id_reply_comment); } public static function deleteOriginLang($id_reply_comment) { if (!Validate::isUnsignedId($id_reply_comment)) { return false; } return Db::getInstance()->execute(' DELETE FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_origin_lang` WHERE `id_ets_rv_reply_comment` = ' . (int)$id_reply_comment ); } public static function getOriginLang($id) { if (!$id || !Validate::isUnsignedId($id) ) { return false; } $qd = new DbQuery(); $qd ->select('*') ->from('ets_rv_reply_comment_origin_lang', 'pcl') ->where('pcl.id_ets_rv_reply_comment=' . (int)$id); return Db::getInstance()->getRow($qd); } public static function deleteReports($id_reply_comment) { if (!Validate::isUnsignedId($id_reply_comment)) { return false; } return Db::getInstance()->execute(' DELETE FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_report` WHERE `id_ets_rv_reply_comment` = ' . (int)$id_reply_comment ); } public static function deleteUsefulness($id_reply_comment, $id_customer = null, $employee = null, $question = null) { if (!Validate::isUnsignedId($id_reply_comment) || $id_customer !== null && !Validate::isUnsignedInt($id_customer) || $employee !== null && !Validate::isUnsignedInt($employee) || $question !== null && !Validate::isUnsignedInt($question) ) { return false; } return Db::getInstance()->execute(' DELETE FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_usefulness` WHERE `id_ets_rv_reply_comment` = ' . (int)$id_reply_comment . ($id_customer !== null ? ' AND `id_customer` = ' . (int)$id_customer : '') . ($employee !== null ? ' AND `employee` = ' . (int)$employee : '') . ($question !== null ? ' AND `question` = ' . (int)$question : '')); } public static function reportComment($id_reply_comment, $id_customer, $question = 0) { return Db::getInstance()->execute(' INSERT INTO `' . _DB_PREFIX_ . 'ets_rv_reply_comment_report` (`id_ets_rv_reply_comment`, `id_customer`, `question`) VALUES (' . (int)$id_reply_comment . ', ' . (int)$id_customer . ', ' . (int)$question . ')'); } public static function isAlreadyReport($id_reply_comment, $id_customer) { return (bool)Db::getInstance()->getValue(' SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_report` WHERE `id_customer` = ' . (int)$id_customer . ' AND `id_ets_rv_reply_comment` = ' . (int)$id_reply_comment); } public static function setCommentUsefulness($id_reply_comment, $usefulness, $id_customer, $employee = 0, $question = 0) { if (!self::isAlreadyUsefulness($id_reply_comment, $id_customer, $employee, $question)) { return Db::getInstance()->execute(' INSERT INTO `' . _DB_PREFIX_ . 'ets_rv_reply_comment_usefulness` (`id_ets_rv_reply_comment`, `usefulness`, `id_customer`, `employee`, `question`) VALUES (' . (int)$id_reply_comment . ', ' . (int)$usefulness . ', ' . (int)$id_customer . ', ' . (int)$employee . ', ' . (int)$question . ') '); } elseif (self::isAlreadyUsefulness($id_reply_comment, $id_customer, $employee, $question, $usefulness)) { return !self::deleteUsefulness($id_reply_comment, $id_customer, $employee, $question); } else { return Db::getInstance()->execute(' UPDATE `' . _DB_PREFIX_ . 'ets_rv_reply_comment_usefulness` SET `usefulness` = ' . (int)$usefulness . ' WHERE `id_ets_rv_reply_comment` = ' . (int)$id_reply_comment . ' AND `id_customer` = ' . (int)$id_customer . ' AND `employee` = ' . (int)$employee . ' AND `question` = ' . (int)$question ); } return true; } public static function isAlreadyUsefulness($id_reply_comment, $id_customer, $employee = 0, $question = 0, $usefulness = null) { return (bool)Db::getInstance()->getValue(' SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_usefulness` WHERE `id_customer` = ' . (int)$id_customer . ' AND `id_ets_rv_reply_comment` = ' . (int)$id_reply_comment . ' AND employee=' . (int)$employee . ' AND question=' . (int)$question . ($usefulness !== null ? ' AND usefulness=' . (int)$usefulness : '') ); } public static function getReportedComments() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT DISTINCT(rc.`id_ets_rv_reply_comment`), rc.`id_product`, IF(c.id_customer, CONCAT(c.`firstname`, \' \', c.`lastname`), rc.customer_name) customer_name, rcl.`content`, rc.`grade`, rc.`date_add`, pl.`name`, rcl.`title` FROM `' . _DB_PREFIX_ . 'ets_rv_reply_comment_report` pcr LEFT JOIN `' . _DB_PREFIX_ . 'ets_rv_reply_comment` pc ON pcr.id_ets_rv_reply_comment = rc.id_ets_rv_reply_comment LEFT JOIN `' . _DB_PREFIX_ . 'ets_rv_reply_comment_lang` pcl ON rcl.id_ets_rv_reply_comment = rc.id_ets_rv_reply_comment AND rcl.`id_lang` = ' . (int)Context::getContext()->language->id . ' LEFT JOIN `' . _DB_PREFIX_ . 'customer` c ON (c.`id_customer` = rc.`id_customer`) LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl ON (pl.`id_product` = rc.`id_product` AND pl.`id_lang` = ' . (int)Context::getContext()->language->id . ' AND pl.`id_lang` = ' . (int)Context::getContext()->language->id . Shop::addSqlRestrictionOnLang('pl') . ') ORDER BY rc.`date_add` DESC '); } public static function deleteAll($question = 0) { return Db::getInstance()->delete('ets_rv_reply_comment', 'question = ' . (int)$question, false); } }