queryGenerator = $generator;
$this->db = $db;
$this->user = $user;
$this->nameList = array();
$this->typeList = array();
$this->ownerNameList = array();
$this->picklistValueMap = array();
$this->picklistRoleMap = array();
$this->headerSortingEnabled = true;
}
public function isHeaderSortingEnabled() {
return $this->headerSortingEnabled;
}
public function setHeaderSorting($enabled) {
$this->headerSortingEnabled = $enabled;
}
public function setupAccessiblePicklistValueList($name) {
$isRoleBased = vtws_isRoleBasedPicklist($name);
$this->picklistRoleMap[$name] = $isRoleBased;
if ($this->picklistRoleMap[$name]) {
$this->picklistValueMap[$name] = getAssignedPicklistValues($name,$this->user->roleid, $this->db);
}
}
public function fetchNameList($field, $result) {
$referenceFieldInfoList = $this->queryGenerator->getReferenceFieldInfoList();
$fieldName = $field->getFieldName();
$rowCount = $this->db->num_rows($result);
$idList = array();
for ($i = 0; $i < $rowCount; $i++) {
$id = $this->db->query_result($result, $i, $field->getColumnName());
if (!isset($this->nameList[$fieldName][$id])) {
$idList[$id] = $id;
}
}
$idList = array_keys($idList);
if(count($idList) == 0) {
return;
}
$moduleList = $referenceFieldInfoList[$fieldName];
foreach ($moduleList as $module) {
$meta = $this->queryGenerator->getMeta($module);
if ($meta->isModuleEntity()) {
if($module == 'Users') {
$nameList = getOwnerNameList($idList);
} else {
//TODO handle multiple module names overriding each other.
$nameList = getEntityName($module, $idList);
}
} else {
$nameList = vtws_getActorEntityName($module, $idList);
}
$entityTypeList = array_intersect(array_keys($nameList), $idList);
foreach ($entityTypeList as $id) {
$this->typeList[$id] = $module;
}
if(empty($this->nameList[$fieldName])) {
$this->nameList[$fieldName] = array();
}
foreach ($entityTypeList as $id) {
$this->typeList[$id] = $module;
$this->nameList[$fieldName][$id] = $nameList[$id];
}
}
}
public function getListViewHeaderFields() {
$meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule());
$moduleFields = $this->queryGenerator->getModuleFields();
$fields = $this->queryGenerator->getFields();
$headerFields = array();
foreach($fields as $fieldName) {
if(array_key_exists($fieldName, $moduleFields)) {
$headerFields[$fieldName] = $moduleFields[$fieldName];
}
}
return $headerFields;
}
function getListViewRecords($focus, $module, $result) {
global $listview_max_textlength, $theme, $default_charset;
require('user_privileges/user_privileges_'.$this->user->id.'.php');
$fields = $this->queryGenerator->getFields();
$meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule());
$moduleFields = $this->queryGenerator->getModuleFields();
$accessibleFieldList = array_keys($moduleFields);
$listViewFields = array_intersect($fields, $accessibleFieldList);
$referenceFieldList = $this->queryGenerator->getReferenceFieldList();
foreach ($referenceFieldList as $fieldName) {
if (in_array($fieldName, $listViewFields)) {
$field = $moduleFields[$fieldName];
$this->fetchNameList($field, $result);
}
}
$db = PearDatabase::getInstance();
$rowCount = $db->num_rows($result);
$ownerFieldList = $this->queryGenerator->getOwnerFieldList();
foreach ($ownerFieldList as $fieldName) {
if (in_array($fieldName, $listViewFields)) {
$field = $moduleFields[$fieldName];
$idList = array();
for ($i = 0; $i < $rowCount; $i++) {
$id = $this->db->query_result($result, $i, $field->getColumnName());
if (!isset($this->ownerNameList[$fieldName][$id])) {
$idList[] = $id;
}
}
if(count($idList) > 0) {
if(!is_array($this->ownerNameList[$fieldName])) {
$this->ownerNameList[$fieldName] = getOwnerNameList($idList);
} else {
//array_merge API loses key information so need to merge the arrays
// manually.
$newOwnerList = getOwnerNameList($idList);
foreach ($newOwnerList as $id => $name) {
$this->ownerNameList[$fieldName][$id] = $name;
}
}
}
}
}
foreach ($listViewFields as $fieldName) {
$field = $moduleFields[$fieldName];
if(!$is_admin && ($field->getFieldDataType() == 'picklist' ||
$field->getFieldDataType() == 'multipicklist')) {
$this->setupAccessiblePicklistValueList($fieldName);
}
}
$useAsterisk = get_use_asterisk($this->user->id);
$data = array();
for ($i = 0; $i < $rowCount; ++$i) {
//Getting the recordId
if($module != 'Users') {
$baseTable = $meta->getEntityBaseTable();
$moduleTableIndexList = $meta->getEntityTableIndexList();
$baseTableIndex = $moduleTableIndexList[$baseTable];
$recordId = $db->query_result($result,$i,$baseTableIndex);
}else {
$recordId = $db->query_result($result,$i,"id");
}
$row = array();
foreach ($listViewFields as $fieldName) {
$field = $moduleFields[$fieldName];
$uitype = $field->getUIType();
$rawValue = $this->db->query_result($result, $i, $field->getColumnName());
if($uitype != 8){
$value = html_entity_decode($rawValue,ENT_QUOTES,$default_charset);
} else {
$value = $rawValue;
}
if($module == 'Documents' && $fieldName == 'filename') {
$downloadtype = $db->query_result($result,$i,'filelocationtype');
$fileName = $db->query_result($result,$i,'filename');
$downloadType = $db->query_result($result,$i,'filelocationtype');
$status = $db->query_result($result,$i,'filestatus');
$fileIdQuery = "select attachmentsid from vtiger_seattachmentsrel where crmid=?";
$fileIdRes = $db->pquery($fileIdQuery,array($recordId));
$fileId = $db->query_result($fileIdRes,0,'attachmentsid');
if($fileName != '' && $status == 1) {
if($downloadType == 'I' ) {
$value = ''.textlength_check($value).
'';
} elseif($downloadType == 'E') {
$value = ''.textlength_check($value).
'';
} else {
$value = ' --';
}
}
$value = $fileicon.$value;
} elseif($module == 'Documents' && $fieldName == 'filesize') {
$downloadType = $db->query_result($result,$i,'filelocationtype');
if($downloadType == 'I') {
$filesize = $value;
if($filesize < 1024)
$value=$filesize.' B';
elseif($filesize > 1024 && $filesize < 1048576)
$value=round($filesize/1024,2).' KB';
else if($filesize > 1048576)
$value=round($filesize/(1024*1024),2).' MB';
} else {
$value = ' --';
}
} elseif( $module == 'Documents' && $fieldName == 'filestatus') {
if($value == 1)
$value=getTranslatedString('yes',$module);
elseif($value == 0)
$value=getTranslatedString('no',$module);
else
$value='--';
} elseif( $module == 'Documents' && $fieldName == 'filetype') {
$downloadType = $db->query_result($result,$i,'filelocationtype');
if($downloadType == 'E' || $downloadType != 'I') {
$value = '--';
}
} elseif ($field->getUIType() == '27') {
if ($value == 'I') {
$value = getTranslatedString('LBL_INTERNAL',$module);
}elseif ($value == 'E') {
$value = getTranslatedString('LBL_EXTERNAL',$module);
}else {
$value = ' --';
}
}elseif ($field->getFieldDataType() == 'picklist') {
//not check for permissions for non admin users for status and activity type field
if($module == 'Calendar' && ($fieldName == 'taskstatus' || $fieldName == 'eventstatus' || $fieldName == 'activitytype')) {
$value = Vtiger_Language_Handler::getTranslatedString($value,$module);
$value = textlength_check($value);
}
else if ($value != '' && !$is_admin && $this->picklistRoleMap[$fieldName] &&
!in_array($value, $this->picklistValueMap[$fieldName]) && strtolower($value) != '--none--' && strtolower($value) != 'none' ) {
$value = "". Vtiger_Language_Handler::getTranslatedString('LBL_NOT_ACCESSIBLE',
$module)."";
} else {
$value = Vtiger_Language_Handler::getTranslatedString($value,$module);
$value = textlength_check($value);
}
}elseif($field->getFieldDataType() == 'date' || $field->getFieldDataType() == 'datetime') {
if($value != '' && $value != '0000-00-00') {
$fieldDataType = $field->getFieldDataType();
if($module == 'Calendar' &&($fieldName == 'date_start' || $fieldName == 'due_date')) {
if($fieldName == 'date_start') {
$timeField = 'time_start';
}else if($fieldName == 'due_date') {
$timeField = 'time_end';
}
$timeFieldValue = $this->db->query_result($result, $i, $timeField);
if(!empty($timeFieldValue)){
$value .= ' '. $timeFieldValue;
//TO make sure it takes time value as well
$fieldDataType = 'datetime';
}
}
if($fieldDataType == 'datetime') {
$value = Vtiger_Datetime_UIType::getDateTimeValue($value);
} else if($fieldDataType == 'date') {
$date = new DateTimeField($value);
$value = $date->getDisplayDate();
}
} elseif ($value == '0000-00-00') {
$value = '';
}
} elseif($field->getFieldDataType() == 'time') {
if(!empty($value)){
$userModel = Users_Privileges_Model::getCurrentUserModel();
if($userModel->get('hour_format') == '12'){
$value = Vtiger_Time_UIType::getTimeValueInAMorPM($value);
}
}
} elseif($field->getFieldDataType() == 'currency') {
if($value != '') {
if($field->getUIType() == 72) {
if($fieldName == 'unit_price') {
$currencyId = getProductBaseCurrency($recordId,$module);
$cursym_convrate = getCurrencySymbolandCRate($currencyId);
$currencySymbol = $cursym_convrate['symbol'];
} else {
$currencyInfo = getInventoryCurrencyInfo($module, $recordId);
$currencySymbol = $currencyInfo['currency_symbol'];
}
$value = CurrencyField::convertToUserFormat($value, null, true);
$row['currencySymbol'] = $currencySymbol;
// $value = CurrencyField::appendCurrencySymbol($currencyValue, $currencySymbol);
} else {
if (!empty($value)) {
$value = CurrencyField::convertToUserFormat($value);
}
}
}
} elseif($field->getFieldDataType() == 'url') {
$matchPattern = "^[\w]+:\/\/^";
preg_match($matchPattern, $rawValue, $matches);
if(!empty ($matches[0])){
$value = ''.textlength_check($value).'';
}else{
$value = ''.textlength_check($value).'';
}
} elseif ($field->getFieldDataType() == 'email') {
global $current_user;
if($current_user->internal_mailer == 1){
//check added for email link in user detailview
$value = "".textlength_check($value)."";
} else {
$value = ''.textlength_check($value).'';
}
} elseif($field->getFieldDataType() == 'boolean') {
if ($value === 'on') {
$value = 1;
} else if ($value == 'off') {
$value = 0;
}
if($value == 1) {
$value = getTranslatedString('yes',$module);
} elseif($value == 0) {
$value = getTranslatedString('no',$module);
} else {
$value = '--';
}
} elseif($field->getUIType() == 98) {
$value = ''.textlength_check(getRoleName($value)).'';
} elseif($field->getFieldDataType() == 'multipicklist') {
$value = ($value != "") ? str_replace(' |##| ',', ',$value) : "";
if(!$is_admin && $value != '') {
$valueArray = ($rawValue != "") ? explode(' |##| ',$rawValue) : array();
$notaccess = ''.getTranslatedString('LBL_NOT_ACCESSIBLE',
$module)."";
$tmp = '';
$tmpArray = array();
foreach($valueArray as $index => $val) {
if(!$listview_max_textlength ||
!(strlen(preg_replace("/(<\/?)(\w+)([^>]*>)/i","",$tmp)) >
$listview_max_textlength)) {
if (!$is_admin && $this->picklistRoleMap[$fieldName] &&
!in_array(trim($val), $this->picklistValueMap[$fieldName])) {
$tmpArray[] = $notaccess;
$tmp .= ', '.$notaccess;
} else {
$tmpArray[] = $val;
$tmp .= ', '.$val;
}
} else {
$tmpArray[] = '...';
$tmp .= '...';
}
}
$value = implode(', ', $tmpArray);
$value = textlength_check($value);
}
} elseif ($field->getFieldDataType() == 'skype') {
$value = ($value != "") ? "".textlength_check($value)."" : "";
} elseif ($field->getFieldDataType() == 'phone') {
if($useAsterisk == 'true') {
$value = "".textlength_check($value)."";
} else {
$value = textlength_check($value);
}
} elseif($field->getFieldDataType() == 'reference') {
$referenceFieldInfoList = $this->queryGenerator->getReferenceFieldInfoList();
$moduleList = $referenceFieldInfoList[$fieldName];
if(count($moduleList) == 1) {
$parentModule = $moduleList[0];
} else {
$parentModule = $this->typeList[$value];
}
if(!empty($value) && !empty($this->nameList[$fieldName]) && !empty($parentModule)) {
$parentMeta = $this->queryGenerator->getMeta($parentModule);
$value = textlength_check($this->nameList[$fieldName][$value]);
if ($parentMeta->isModuleEntity() && $parentModule != "Users") {
$value = "$value";
}
} else {
$value = '--';
}
} elseif($field->getFieldDataType() == 'owner') {
$value = textlength_check($this->ownerNameList[$fieldName][$value]);
} elseif ($field->getUIType() == 25) {
//TODO clean request object reference.
$contactId=$_REQUEST['record'];
$emailId=$this->db->query_result($result,$i,"activityid");
$result1 = $this->db->pquery("SELECT access_count FROM vtiger_email_track WHERE ".
"crmid=? AND mailid=?", array($contactId,$emailId));
$value=$this->db->query_result($result1,0,"access_count");
if(!$value) {
$value = 0;
}
} elseif($field->getUIType() == 8){
if(!empty($value)){
$temp_val = html_entity_decode($value,ENT_QUOTES,$default_charset);
$json = new Zend_Json();
$value = vt_suppressHTMLTags(implode(',',$json->decode($temp_val)));
}
} elseif ( in_array($uitype,array(7,9,90)) ) {
$value = "".textlength_check($value)."";
} else {
$value = textlength_check($value);
}
// // vtlib customization: For listview javascript triggers
// $value = "$value ";
// // END
$row[$fieldName] = $value;
}
$data[$recordId] = $row;
}
return $data;
}
}
?>