| Server IP : 138.197.176.125 / Your IP : 216.73.217.172 Web Server : Apache/2.4.41 (Ubuntu) System : Linux SuiteCRM-8 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : root ( 0) PHP Version : 8.3.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/crm_easylife/modules/Products/models/ |
Upload File : |
<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class Products_ListView_Model extends Vtiger_ListView_Model {
/**
* Function to get the list view entries
* @param Vtiger_Paging_Model $pagingModel
* @return <Array> - Associative array of record id mapped to Vtiger_Record_Model instance.
*/
public function getListViewEntries($pagingModel) {
$db = PearDatabase::getInstance();
$moduleName = $this->getModule()->get('name');
$moduleFocus = CRMEntity::getInstance($moduleName);
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
$queryGenerator = $this->get('query_generator');
$listViewContoller = $this->get('listview_controller');
$searchParams = $this->get('search_params');
if(empty($searchParams)) {
$searchParams = array();
}
$glue = "";
if(php7_count($queryGenerator->getWhereFields()) > 0 && (php7_count($searchParams)) > 0) {
$glue = QueryGenerator::$AND;
}
$queryGenerator->parseAdvFilterList($searchParams, $glue);
$searchKey = $this->get('search_key');
$searchValue = $this->get('search_value');
$operator = $this->get('operator');
if(!empty($searchKey)) {
$queryGenerator->addUserSearchConditions(array('search_field' => $searchKey, 'search_text' => $searchValue, 'operator' => $operator));
}
$orderBy = $this->getForSql('orderby');
$sortOrder = $this->getForSql('sortorder');
if(!empty($orderBy)){
$queryGenerator = $this->get('query_generator');
$fieldModels = $queryGenerator->getModuleFields();
$orderByFieldModel = $fieldModels[$orderBy];
if($orderByFieldModel && ($orderByFieldModel->getFieldDataType() == Vtiger_Field_Model::REFERENCE_TYPE ||
$orderByFieldModel->getFieldDataType() == Vtiger_Field_Model::OWNER_TYPE)){
$queryGenerator->addWhereField($orderBy);
}
}
$listQuery = $this->getQuery();
if($this->get('subProductsPopup')){
$listQuery = $this->addSubProductsQuery($listQuery);
}
$sourceModule = $this->get('src_module');
$sourceField = $this->get('src_field');
if(!empty($sourceModule)) {
if(method_exists($moduleModel, 'getQueryByModuleField')) {
$overrideQuery = $moduleModel->getQueryByModuleField($sourceModule, $sourceField, $this->get('src_record'), $listQuery);
if(!empty($overrideQuery)) {
$listQuery = $overrideQuery;
}
}
}
$startIndex = $pagingModel->getStartIndex();
$pageLimit = $pagingModel->getPageLimit();
if(!empty($orderBy) && $orderByFieldModel) {
$listQuery .= ' ORDER BY '.$queryGenerator->getOrderByColumn($orderBy).' '.$sortOrder;
} else if(empty($orderBy) && empty($sortOrder)){
//List view will be displayed on recently created/modified records
$listQuery .= ' ORDER BY vtiger_crmentity.modifiedtime DESC';
}
$viewid = ListViewSession::getCurrentView($moduleName);
if(empty($viewid)){
$viewid = $pagingModel->get('viewid');
}
$_SESSION['lvs'][$moduleName][$viewid]['start'] = $pagingModel->get('page');
ListViewSession::setSessionQuery($moduleName, $listQuery, $viewid);
//For Products popup in Price Book Related list
if(($sourceModule !== 'PriceBooks' && $sourceField !== 'priceBookRelatedList')
&& ($sourceModule !== 'Products' && $sourceField !== 'productsList')) {
$listQuery .= " LIMIT $startIndex,".($pageLimit+1);
}
$listResult = $db->pquery($listQuery, array());
$listViewRecordModels = array();
$listViewEntries = $listViewContoller->getListViewRecords($moduleFocus,$moduleName, $listResult);
$pagingModel->calculatePageRange($listViewEntries);
if($db->num_rows($listResult) > $pageLimit){
array_pop($listViewEntries);
$pagingModel->set('nextPageExists', true);
}else{
$pagingModel->set('nextPageExists', false);
}
$index = 0;
foreach($listViewEntries as $recordId => $record) {
$rawData = $db->query_result_rowdata($listResult, $index++);
$record['id'] = $recordId;
$listViewRecordModels[$recordId] = $moduleModel->getRecordFromArray($record, $rawData);
}
return $listViewRecordModels;
}
public function addSubProductsQuery($listQuery){
$productId = $this->get('productId');
$splitQuery = split('WHERE', $listQuery);
$splitQuery[0] .= " LEFT JOIN vtiger_seproductsrel ON vtiger_seproductsrel.crmid = vtiger_products.productid AND vtiger_seproductsrel.setype='Products'";
$splitQuery[1] .= " AND vtiger_seproductsrel.productid = $productId AND vtiger_products.discontinued = 1";
$listQuery = $splitQuery[0]. ' WHERE ' . $splitQuery[1];
return $listQuery;
}
public function getSubProducts($subProductId){
$flag = false;
if(!empty($subProductId)){
$db = PearDatabase::getInstance();
$query = 'SELECT vtiger_seproductsrel.crmid from vtiger_seproductsrel
INNER JOIN vtiger_products ON vtiger_products.productid = vtiger_seproductsrel.crmid
INNER JOIN vtiger_crmentity ON vtiger_seproductsrel.crmid = vtiger_crmentity.crmid
AND vtiger_crmentity.deleted = 0 AND vtiger_seproductsrel.setype=?
WHERE vtiger_seproductsrel.productid=? AND vtiger_products.discontinued = 1';
$result = $db->pquery($query, array($this->getModule()->get('name'), $subProductId ));
if($db->num_rows($result) > 0){
$flag = true;
}
}
return $flag;
}
/**
* Function to get the list view entries
* @param Vtiger_Paging_Model $pagingModel
* @return <Array> - Associative array of record id mapped to Vtiger_Record_Model instance.
*/
public function getListViewCount() {
$db = PearDatabase::getInstance();
$queryGenerator = $this->get('query_generator');
$searchParams = $this->get('search_params');
if(empty($searchParams)) {
$searchParams = array();
}
$glue = "";
if(php7_count($queryGenerator->getWhereFields()) > 0 && (php7_count($searchParams)) > 0) {
$glue = QueryGenerator::$AND;
}
$queryGenerator->parseAdvFilterList($searchParams, $glue);
$searchKey = $this->get('search_key');
$searchValue = $this->get('search_value');
$operator = $this->get('operator');
if(!empty($searchKey)) {
$queryGenerator->addUserSearchConditions(array('search_field' => $searchKey, 'search_text' => $searchValue, 'operator' => $operator));
}
$listQuery = $this->getQuery();
if($this->get('subProductsPopup')){
$listQuery = $this->addSubProductsQuery($listQuery);
}
$sourceModule = $this->get('src_module');
if(!empty($sourceModule)) {
$moduleModel = $this->getModule();
if(method_exists($moduleModel, 'getQueryByModuleField')) {
$overrideQuery = $moduleModel->getQueryByModuleField($sourceModule, $this->get('src_field'), $this->get('src_record'), $listQuery);
if(!empty($overrideQuery)) {
$listQuery = $overrideQuery;
}
}
}
$position = stripos($listQuery, ' from ');
if ($position) {
$split = preg_split('/ from /i', $listQuery);
$splitCount = php7_count($split);
$listQuery = 'SELECT count(*) AS count ';
for ($i=1; $i<$splitCount; $i++) {
$listQuery = $listQuery. ' FROM ' .$split[$i];
}
}
if($this->getModule()->get('name') == 'Calendar'){
$listQuery .= ' AND activitytype <> "Emails"';
}
$listResult = $db->pquery($listQuery, array());
return $db->query_result($listResult, 0, 'count');
}
}