Back to PhocacartRelated class

Method getRelatedItemsById

public static
getRelatedItemsById
(mixed $productId, mixed $select = 0, mixed $frontend = 0)

Method getRelatedItemsById - Source code

/*
 * Try to find the best menu link so we search for category which we are located
 * if we find the category, we use this, if not we use another if accessible, etc.
 */
public static function getRelatedItemsById($productId, $select = 0, $frontend = 0)
{
    $db = Factory::getDBO();
    $wheres = array();
    $wheres[] = 't.product_a = ' . (int) $productId;
    $catid = 0;
    $params = PhocacartUtils::getComponentParameters();
    // FRONTEND
    $skip = array();
    $skip['access'] = $params->get('sql_product_skip_access', 0);
    $skip['group'] = $params->get('sql_product_skip_group', 0);
    //$skip['attributes']	    = $params->get('sql_product_skip_attributes', 0);
    $skip['category_type'] = $params->get('sql_product_skip_category_type', 0);
    //$skip['tax'] = $params->get('sql_product_skip_tax', 0);
    if ($frontend) {
        $user = PhocacartUser::getUser();
        $userLevels = implode(',', $user->getAuthorisedViewLevels());
        $userGroups = implode(',', PhocacartGroup::getGroupsById($user->id, 1, 1));
        if (!$skip['category_type']) {
            $wheres[] = " c.type IN (0,1)";
            // Related are displayed only in online shop (0 - all, 1 - online shop, 2 - pos)
        }
        if (!$skip['access']) {
            $wheres[] = " c.access IN (" . $userLevels . ")";
            $wheres[] = " a.access IN (" . $userLevels . ")";
        }
        if (!$skip['group']) {
            $wheres[] = " (ga.group_id IN (" . $userGroups . ") OR ga.group_id IS NULL)";
            $wheres[] = " (gc.group_id IN (" . $userGroups . ") OR gc.group_id IS NULL)";
        }
        $wheres[] = " c.published = 1";
        $wheres[] = " a.published = 1";
        $catid = PhocacartCategoryMultiple::getCurrentCategoryId();
    }
    if ($select == 1) {
        $query = ' SELECT t.product_b';
    } else {
        if ($select == 2) {
            $query = ' SELECT a.id, a.alias';
        } else {
            // FULL GROUP BY ISSUE
            //$query = ' SELECT a.id as id, a.title as title, a.image as image, a.alias as alias,'
            //		.' c.id as catid, c.alias as catalias, c.title as cattitle';
            $query = ' SELECT DISTINCT a.id as id, a.title as title, a.image as image, a.alias as alias, a.description, a.description_long,' . ' SUBSTRING_INDEX(GROUP_CONCAT(c.id ORDER BY c.parent_id), \',\', 1) as catid,' . ' SUBSTRING_INDEX(GROUP_CONCAT(c.title ORDER BY c.parent_id), \',\', 1) as cattitle,' . ' SUBSTRING_INDEX(GROUP_CONCAT(c.alias ORDER BY c.parent_id), \',\', 1) as catalias';
            /*.' (SELECT c.id FROM jos_phocacart_product_categories AS pc'
               .' LEFT JOIN jos_phocacart_categories AS c ON c.id = pc.category_id WHERE a.id = pc.product_id LIMIT 1) AS catid, '
              .' (SELECT c.title FROM jos_phocacart_product_categories AS pc'
              .' LEFT JOIN jos_phocacart_categories AS c ON c.id = pc.category_id WHERE a.id = pc.product_id LIMIT 1) AS cattitle, '
              .' (SELECT c.alias FROM jos_phocacart_product_categories AS pc'
              .' LEFT JOIN jos_phocacart_categories AS c ON c.id = pc.category_id WHERE a.id = pc.product_id LIMIT 1) AS catalias';*/
        }
    }
    if ((int) $catid > 0) {
        $query .= ', ';
        $query .= ' GROUP_CONCAT(c2.id) AS catid2, GROUP_CONCAT(c2.alias) AS catalias2, GROUP_CONCAT(c2.title) AS cattitle2';
    }
    if (!$frontend) {
        $query .= ', ';
        $query .= ' GROUP_CONCAT(c.title SEPARATOR " ") AS categories_title';
    }
    $query .= ' FROM #__phocacart_products AS a' . ' LEFT JOIN #__phocacart_product_related AS t ON a.id = t.product_b' . ' LEFT JOIN #__phocacart_product_categories AS pc ON pc.product_id = a.id' . ' LEFT JOIN #__phocacart_categories AS c ON c.id = pc.category_id';
    if ((int) $catid > 0) {
        $query .= ' LEFT JOIN #__phocacart_categories AS c2 ON c2.id = pc.category_id and pc.category_id = ' . (int) $catid;
    }
    if ($frontend && !$skip['group']) {
        $query .= ' LEFT JOIN #__phocacart_item_groups AS ga ON a.id = ga.item_id AND ga.type = 3' . ' LEFT JOIN #__phocacart_item_groups AS gc ON c.id = gc.item_id AND gc.type = 2';
        // type 2 is category
    }
    $query .= ' WHERE ' . implode(' AND ', $wheres);
    if ($select == 1) {
        $query .= ' GROUP BY a.id, t.product_b';
    } else {
        if ($select == 2) {
            $query .= ' GROUP BY a.id, a.alias';
        } else {
            // FULL GROUP BY ISSUE
            //$query .= ' GROUP BY a.id, a.title, a.image, a.alias, c.id, c.alias, c.title';
            $query .= ' GROUP BY a.id, a.title, a.alias, a.image, a.description, a.description_long';
        }
    }
    $db->setQuery($query);
    if ($select == 1) {
        $related = $db->loadColumn();
    } else {
        $related = $db->loadObjectList();
    }
    return $related;
}