Current File : /var/www/vinorea/modules/tvcmsproductcomments/tvcmsproductcriterion.php
<?php
/**
 * 2007-2025 PrestaShop.
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to http://www.prestashop.com for more information.
 *
 *  @author PrestaShop SA <contact@prestashop.com>
 *  @copyright  2007-2025 PrestaShop SA
 *  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 *  International Registered Trademark & Property of PrestaShop SA
 */
class TvcmsProductCommentCriterion
{
    /**
     * Add a Comment Criterion.
     *
     * @return bool succeed
     */
    public static function add($id_lang, $name)
    {
        if (!Validate::isUnsignedId($id_lang)
            || !Validate::isMessage($name)) {
            exit(Tools::displayError());
        }

        return Db::getInstance()->execute('
        INSERT INTO `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion`
        (`id_lang`, `name`) VALUES(
        ' . (int) $id_lang . ',
        \'' . pSQL($name) . '\')');
    }

    /**
     * Link a Comment Criterion to a product.
     *
     * @return bool succeed
     */
    public static function addToProduct($id_tvcmsproduct_comment_criterion, $id_product)
    {
        if (!Validate::isUnsignedId($id_tvcmsproduct_comment_criterion)
            || !Validate::isUnsignedId($id_product)) {
            exit(Tools::displayError());
        }

        return Db::getInstance()->execute('
        INSERT INTO `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion_product`
        (`id_tvcmsproduct_comment_criterion`, `id_product`) VALUES(
        ' . (int) $id_tvcmsproduct_comment_criterion . ',
        ' . (int) $id_product . ')');
    }

    /**
     * Add grade to a criterion.
     *
     * @return bool succeed
     */
    public static function addGrade($id_tvcmsproduct_comment, $id_tvcmsproduct_comment_criterion, $grade)
    {
        if (!Validate::isUnsignedId($id_tvcmsproduct_comment)
            || !Validate::isUnsignedId($id_tvcmsproduct_comment_criterion)) {
            exit(Tools::displayError());
        }
        if ($grade < 0) {
            $grade = 0;
        } elseif ($grade > 10) {
            $grade = 10;
        }

        return Db::getInstance()->execute('
        INSERT INTO `' . _DB_PREFIX_ . 'tvcmsproduct_comment_grade`
        (`id_tvcmsproduct_comment`, `id_tvcmsproduct_comment_criterion`, `grade`) VALUES(
        ' . (int) $id_tvcmsproduct_comment . ',
        ' . (int) $id_tvcmsproduct_comment_criterion . ',
        ' . (int) $grade . ')');
    }

    /**
     * Update criterion.
     *
     * @return bool succeed
     */
    public static function update($id_tvcmsproduct_comment_criterion, $id_lang, $name)
    {
        if (!Validate::isUnsignedId($id_tvcmsproduct_comment_criterion)
            || !Validate::isUnsignedId($id_lang)
            || !Validate::isMessage($name)) {
            exit(Tools::displayError());
        }

        return Db::getInstance()->execute('
        UPDATE `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion` SET
        `name` = \'' . pSQL($name) . '\'
        WHERE `id_tvcmsproduct_comment_criterion` = ' . (int) $id_tvcmsproduct_comment_criterion . ' AND
        `id_lang` = ' . (int) $id_lang);
    }

    /**
     * Get criterion by Product.
     *
     * @return array Criterion
     */
    public static function getByProduct($id_product, $id_lang)
    {
        if (!Validate::isUnsignedId($id_product)
            || !Validate::isUnsignedId($id_lang)) {
            exit(Tools::displayError());
        }

        return Db::getInstance()->executeS('
        SELECT pcc.`id_tvcmsproduct_comment_criterion`, pcc.`name`
        FROM `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion` pcc
        INNER JOIN `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion_product` pccp ON '
             . 'pcc.`id_tvcmsproduct_comment_criterion` = pccp.`id_tvcmsproduct_comment_criterion`
        WHERE pccp.`id_product` = ' . (int) $id_product . ' AND 
        pcc.`id_lang` = ' . (int) $id_lang);
    }

    /**
     * Get Criterions.
     *
     * @return array Criterions
     */
    public static function get($id_lang)
    {
        if (!Validate::isUnsignedId($id_lang)) {
            exit(Tools::displayError());
        }

        return Db::getInstance()->executeS('
        SELECT pcc.`id_tvcmsproduct_comment_criterion`, pcc.`name`
          FROM `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion` pcc
        WHERE pcc.`id_lang` = ' . (int) $id_lang . '
        ORDER BY pcc.`name` ASC');
    }

    /**
     * Delete product criterion by product.
     *
     * @return bool succeed
     */
    public static function deleteByProduct($id_product)
    {
        if (!Validate::isUnsignedId($id_product)) {
            exit(Tools::displayError());
        }

        return Db::getInstance()->execute('
        DELETE FROM `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion_product`
        WHERE `id_product` = ' . (int) $id_product);
    }

    /**
     * Delete all reference of a criterion.
     *
     * @return bool succeed
     */
    public static function delete($id_tvcmsproduct_comment_criterion)
    {
        if (!Validate::isUnsignedId($id_tvcmsproduct_comment_criterion)) {
            exit(Tools::displayError());
        }
        $result = Db::getInstance()->execute('
        DELETE FROM `' . _DB_PREFIX_ . 'tvcmsproduct_comment_grade`
        WHERE `id_tvcmsproduct_comment_criterion` = ' . (int) $id_tvcmsproduct_comment_criterion);
        if (false === $result) {
            return $result;
        }
        $result = Db::getInstance()->execute('
        DELETE FROM `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion_product`
        WHERE `id_tvcmsproduct_comment_criterion` = ' . (int) $id_tvcmsproduct_comment_criterion);
        if (false === $result) {
            return $result;
        }

        return Db::getInstance()->execute('
        DELETE FROM `' . _DB_PREFIX_ . 'tvcmsproduct_comment_criterion`
        WHERE `id_tvcmsproduct_comment_criterion` = ' . (int) $id_tvcmsproduct_comment_criterion);
    }
}