Files
crm.clientright.ru/modules/Documents/Documents.php
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

635 lines
25 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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.
********************************************************************************/
// Note is used to store customer information.
class Documents extends CRMEntity {
var $log;
var $db;
var $table_name = "vtiger_notes";
var $table_index= 'notesid';
var $default_note_name_dom = array('Meeting vtiger_notes', 'Reminder');
var $tab_name = Array('vtiger_crmentity','vtiger_notes','vtiger_notescf');
var $tab_name_index = Array('vtiger_crmentity'=>'crmid','vtiger_notes'=>'notesid','vtiger_senotesrel'=>'notesid','vtiger_notescf'=>'notesid');
/**
* Mandatory table for supporting custom fields.
*/
var $customFieldTable = Array('vtiger_notescf', 'notesid');
var $column_fields = Array();
var $sortby_fields = Array('title','modifiedtime','filename','createdtime','lastname','filedownloadcount','smownerid');
// This is used to retrieve related vtiger_fields from form posts.
var $additional_column_fields = Array('', '', '', '');
// This is the list of vtiger_fields that are in the lists.
var $list_fields = Array(
'Title'=>Array('notes'=>'title'),
'File Name'=>Array('notes'=>'filename'),
'Modified Time'=>Array('crmentity'=>'modifiedtime'),
'Assigned To' => Array('crmentity'=>'smownerid'),
'Folder Name' => Array('attachmentsfolder'=>'folderid')
);
var $list_fields_name = Array(
'Title'=>'notes_title',
'File Name'=>'filename',
'Modified Time'=>'modifiedtime',
'Assigned To'=>'assigned_user_id',
'Folder Name' => 'folderid'
);
var $search_fields = Array(
'Title' => Array('notes'=>'notes_title'),
'File Name' => Array('notes'=>'filename'),
'Assigned To' => Array('crmentity'=>'smownerid'),
'Folder Name' => Array('attachmentsfolder'=>'foldername')
);
var $search_fields_name = Array(
'Title' => 'notes_title',
'File Name' => 'filename',
'Assigned To' => 'assigned_user_id',
'Folder Name' => 'folderid'
);
var $list_link_field= 'notes_title';
var $old_filename = '';
//var $groupTable = Array('vtiger_notegrouprelation','notesid');
var $mandatory_fields = Array('notes_title','createdtime' ,'modifiedtime','filename','filesize','filetype','filedownloadcount','assigned_user_id','document_source','notecontent','filelocationtype','folderid');
//Added these variables which are used as default order by and sortorder in ListView
var $default_order_by = 'title';
var $default_sort_order = 'ASC';
function Documents() {
$this->log = LoggerManager::getLogger('notes');
$this->log->debug("Entering Documents() method ...");
$this->db = PearDatabase::getInstance();
$this->column_fields = getColumnFields('Documents');
$this->log->debug("Exiting Documents method ...");
}
function save_module($module)
{
global $log,$adb,$upload_badext;
$insertion_mode = $this->mode;
if(isset($this->parentid) && $this->parentid != '')
$relid = $this->parentid;
//inserting into vtiger_senotesrel
if(isset($relid) && $relid != '')
{
$this->insertintonotesrel($relid,$this->id);
}
$filetype_fieldname = $this->getFileTypeFieldName();
$filename_fieldname = $this->getFile_FieldName();
/* Document Multiple Attachment Start */
if($this->column_fields[$filetype_fieldname] == 'I' ){
foreach($_FILES as $fileindex => $files){
foreach ($files as $key => $value) {
if($value['name'] != ''){
$errCode= $value['error'];
if($errCode == 0){
if($value['name'] != '' && $value['size'] > 0){
$filename = $value['name'];
$filename = from_html(preg_replace('/\s+/', '_', $filename));
$filetype = $value['type'];
$filesize = $value['size'];
$fileSizeCount += $filesize;
$filelocationtype = 'I';
$binFile = sanitizeUploadFileName($filename, $upload_badext);
$filename = ltrim(basename(" ".$binFile)); //allowed filename like UTF-8 characters
if($key == 0){
$fileName .= $filename;
$fileType .= $filetype;
}else{
$fileName .= '<br>'.$filename;
$fileType .= ', '.$filetype;
}
}
}
}elseif($this->mode == 'edit') {
$fileres = $adb->pquery("select filetype, filesize,filename,filedownloadcount,filelocationtype from vtiger_notes where notesid=?", array($this->id));
if ($adb->num_rows($fileres) > 0) {
$fileName = $adb->query_result($fileres, 0, 'filename');
$fileType = $adb->query_result($fileres, 0, 'filetype');
$fileSizeCount = $adb->query_result($fileres, 0, 'filesize');
$filedownloadcount = $adb->query_result($fileres, 0, 'filedownloadcount');
$filelocationtype = $adb->query_result($fileres, 0, 'filelocationtype');
}
}elseif($this->column_fields[$filename_fieldname]) {
$fileName = $this->column_fields[$filename_fieldname];
$fileSizeCount = $this->column_fields['filesize'];
$fileType = $this->column_fields['filetype'];
$filelocationtype = $this->column_fields[$filetype_fieldname];
$filedownloadcount = 0;
} else {
$filelocationtype = 'I';
$fileType = '';
$fileSizeCount = 0;
$filedownloadcount = null;
}
}
}
}
/* Document Multiple Attachment End */
else if($this->column_fields[$filetype_fieldname] == 'E' ){
$filelocationtype = 'E';
$filename = $this->column_fields[$filename_fieldname];
// If filename does not has the protocol prefix, default it to http://
// Protocol prefix could be like (https://, smb://, file://, \\, smb:\\,...)
if(!empty($filename) && !preg_match('/^\w{1,5}:\/\/|^\w{0,3}:?\\\\\\\\/', trim($filename), $match)) {
$filename = "http://$filename";
}
$filetype = '';
$filesize = 0;
$filedownloadcount = null;
}
/* Document Multiple Attachment Start */
if($this->mode == 'edit'){
$getFileTypeQuery = $adb->pquery("SELECT * FROM vtiger_notes WHERE notesid = ?",array($this->id));
if($adb->num_rows($getFileTypeQuery)){
$getFileType = $adb->query_result($getFileTypeQuery,0,'filetype');
$getFileName = $adb->query_result($getFileTypeQuery,0,'filename');
$filedownloadcount = $adb->query_result($getFileTypeQuery,0,'filedownloadcount');
$fileSize = $adb->query_result($getFileTypeQuery,0,'filesize');
$getFileNames = $getFileName."<br>".$fileName;
if($fileType != ''){
$fileTypes = $getFileType.", ".$fileType;
}else{
$fileTypes = $getFileType;
}
$filedownloadcounts = $filedownloadcount;
if($fileSizeCount){
$fileSizeCounts = $fileSize + $fileSizeCount;
}else{
$fileSizeCounts = $fileSize;
}
}
}else{
$fileTypes = $fileType;
$getFileNames = $fileName;
$filedownloadcounts = $filedownloadcount;
$fileSizeCounts = $fileSizeCount;
}
$query = "UPDATE vtiger_notes SET filename = ? ,filesize = ?, filetype = ? , filelocationtype = ? , filedownloadcount = ? WHERE notesid = ?";
$re=$adb->pquery($query,array(strip_tags(trim($getFileNames)),$fileSizeCounts,$fileTypes,$filelocationtype,$filedownloadcounts,$this->id));
//Inserting into attachments table
if($filelocationtype == 'I') {
$this->insertIntoAttachment($this->id,'Documents');
}elseif ($filelocationtype == 'E') {
$query = "delete from vtiger_seattachmentsrel where crmid = ?";
$qparams = array($this->id);
$adb->pquery($query, $qparams);
}elseif ($filelocationtype == '') {
$this->column_fields['filename'] = 'I';
}
//set the column_fields so that its available in the event handlers
$this->column_fields['filename'] = $getFileNames;
$this->column_fields['filesize'] = $fileSizeCounts;
$this->column_fields['filetype'] = $fileTypes;
$this->column_fields['filedownloadcount'] = $filedownloadcounts;
/* Document Multiple Attachment End */
}
/**
* This function is used to add the vtiger_attachments. This will call the function uploadAndSaveFile which will upload the attachment into the server and save that attachment information in the database.
* @param int $id - entity id to which the vtiger_files to be uploaded
* @param string $module - the current module name
*/
function insertIntoAttachment($id,$module)
{
global $log, $adb;
$log->debug("Entering into insertIntoAttachment($id,$module) method.");
$file_saved = false;
/* Document Multiple Attachment Start */
foreach($_FILES as $fileindex => $files)
{
// ИСПРАВЛЕНИЕ: $files уже содержит массив с name, type, tmp_name, error, size
if(isset($files['name']) && $files['name'] != '' && $files['size'] > 0)
{
$files['original_name'] = vtlib_purify($_REQUEST[$fileindex.'_hidden']);
$file_saved = $this->uploadAndSaveFile($id,$module,$files);
if(!$file_saved) {
// Обработка ошибки загрузки файла
global $log;
$log->error("Document file upload failed: " . $files['name']);
$_SESSION['upload_error'] = "Ошибка загрузки файла: " . $files['name'];
}
}
}
/* Document Multiple Attachment End */
$log->debug("Exiting from insertIntoAttachment($id,$module) method.");
}
/** Function used to get the sort order for Documents listview
* @return string $sorder - first check the $_REQUEST['sorder'] if request value is empty then check in the $_SESSION['NOTES_SORT_ORDER'] if this session value is empty then default sort order will be returned.
*/
function getSortOrder()
{
global $log;
$log->debug("Entering getSortOrder() method ...");
if(isset($_REQUEST['sorder']))
$sorder = $this->db->sql_escape_string($_REQUEST['sorder']);
else
$sorder = (($_SESSION['NOTES_SORT_ORDER'] != '')?($_SESSION['NOTES_SORT_ORDER']):($this->default_sort_order));
$log->debug("Exiting getSortOrder() method ...");
return $sorder;
}
/** Function used to get the order by value for Documents listview
* @return string $order_by - first check the $_REQUEST['order_by'] if request value is empty then check in the $_SESSION['NOTES_ORDER_BY'] if this session value is empty then default order by will be returned.
*/
function getOrderBy()
{
global $log;
$log->debug("Entering getOrderBy() method ...");
$use_default_order_by = '';
if(PerformancePrefs::getBoolean('LISTVIEW_DEFAULT_SORTING', true)) {
$use_default_order_by = $this->default_order_by;
}
if (isset($_REQUEST['order_by']))
$order_by = $this->db->sql_escape_string($_REQUEST['order_by']);
else
$order_by = (($_SESSION['NOTES_ORDER_BY'] != '')?($_SESSION['NOTES_ORDER_BY']):($use_default_order_by));
$log->debug("Exiting getOrderBy method ...");
return $order_by;
}
/**
* Function used to get the sort order for Documents listview
* @return String $sorder - sort order for a given folder.
*/
function getSortOrderForFolder($folderId) {
if(isset($_REQUEST['sorder']) && $_REQUEST['folderid'] == $folderId) {
$sorder = $this->db->sql_escape_string($_REQUEST['sorder']);
} elseif(is_array($_SESSION['NOTES_FOLDER_SORT_ORDER']) &&
!empty($_SESSION['NOTES_FOLDER_SORT_ORDER'][$folderId])) {
$sorder = $_SESSION['NOTES_FOLDER_SORT_ORDER'][$folderId];
} else {
$sorder = $this->default_sort_order;
}
return $sorder;
}
/**
* Function used to get the order by value for Documents listview
* @return String order by column for a given folder.
*/
function getOrderByForFolder($folderId) {
$use_default_order_by = '';
if(PerformancePrefs::getBoolean('LISTVIEW_DEFAULT_SORTING', true)) {
$use_default_order_by = $this->default_order_by;
}
if (isset($_REQUEST['order_by']) && $_REQUEST['folderid'] == $folderId) {
$order_by = $this->db->sql_escape_string($_REQUEST['order_by']);
} elseif(is_array($_SESSION['NOTES_FOLDER_ORDER_BY']) &&
!empty($_SESSION['NOTES_FOLDER_ORDER_BY'][$folderId])) {
$order_by = $_SESSION['NOTES_FOLDER_ORDER_BY'][$folderId];
} else {
$order_by = ($use_default_order_by);
}
return $order_by;
}
/** Function to export the notes in CSV Format
* @param reference variable - where condition is passed when the query is executed
* Returns Export Documents Query.
*/
function create_export_query($where)
{
global $log,$current_user;
$log->debug("Entering create_export_query(". $where.") method ...");
include("include/utils/ExportUtils.php");
//To get the Permitted fields query and the permitted fields list
$sql = getPermittedFieldsQuery("Documents", "detail_view");
$fields_list = getFieldsListFromQuery($sql);
$userNameSql = getSqlForNameInDisplayFormat(array('first_name'=>
'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
$query = "SELECT $fields_list, case when (vtiger_users.user_name not like '') then $userNameSql else vtiger_groups.groupname end as user_name" .
" FROM vtiger_notes
inner join vtiger_crmentity
on vtiger_crmentity.crmid=vtiger_notes.notesid
LEFT JOIN vtiger_attachmentsfolder on vtiger_notes.folderid=vtiger_attachmentsfolder.folderid
LEFT JOIN vtiger_users ON vtiger_crmentity.smownerid=vtiger_users.id " .
" LEFT JOIN vtiger_groups ON vtiger_crmentity.smownerid=vtiger_groups.groupid "
;
$query .= getNonAdminAccessControlQuery('Documents',$current_user);
$where_auto=" vtiger_crmentity.deleted=0";
if($where != "")
$query .= " WHERE ($where) AND ".$where_auto;
else
$query .= " WHERE ".$where_auto;
$log->debug("Exiting create_export_query method ...");
return $query;
}
function del_create_def_folder($query)
{
global $adb;
$dbQuery = $query." AND vtiger_attachmentsfolder.folderid = 0";
$dbresult = $adb->pquery($dbQuery,array());
$noofnotes = $adb->num_rows($dbresult);
if($noofnotes > 0)
{
$folderQuery = "select folderid from vtiger_attachmentsfolder";
$folderresult = $adb->pquery($folderQuery,array());
$noofdeffolders = $adb->num_rows($folderresult);
if($noofdeffolders == 0)
{
$insertQuery = "insert into vtiger_attachmentsfolder values (0,'Default','Contains all attachments for which a folder is not set',1,0)";
$insertresult = $adb->pquery($insertQuery,array());
}
}
}
function insertintonotesrel($relid,$id)
{
global $adb;
$dbQuery = "insert into vtiger_senotesrel values ( ?, ? )";
$dbresult = $adb->pquery($dbQuery,array($relid,$id));
}
/*function save_related_module($module, $crmid, $with_module, $with_crmid){
}*/
/*
* Function to get the primary query part of a report
* @param - $module Primary module name
* returns the query string formed on fetching the related data for report for primary module
*/
function generateReportsQuery($module,$queryplanner){
$moduletable = $this->table_name;
$moduleindex = $this->tab_name_index[$moduletable];
$query = "from $moduletable
inner join vtiger_crmentity on vtiger_crmentity.crmid=$moduletable.$moduleindex";
if ($queryplanner->requireTable("vtiger_attachmentsfolder")){
$query .= " inner join vtiger_attachmentsfolder on vtiger_attachmentsfolder.folderid=$moduletable.folderid";
}
if ($queryplanner->requireTable("vtiger_groups".$module)){
$query .= " left join vtiger_groups as vtiger_groups".$module." on vtiger_groups".$module.".groupid = vtiger_crmentity.smownerid";
}
if($queryplanner->requireTable('vtiger_createdby'.$module)){
$query .= " LEFT JOIN vtiger_users AS vtiger_createdby$module ON vtiger_createdby$module.id = vtiger_crmentity.smcreatorid";
}
if ($queryplanner->requireTable("vtiger_users".$module)){
$query .= " left join vtiger_users as vtiger_users".$module." on vtiger_users".$module.".id = vtiger_crmentity.smownerid";
}
$query .= " left join vtiger_groups on vtiger_groups.groupid = vtiger_crmentity.smownerid";
$query .= " left join vtiger_notescf on vtiger_notes.notesid = vtiger_notescf.notesid";
$query .= " left join vtiger_users on vtiger_users.id = vtiger_crmentity.smownerid";
if ($queryplanner->requireTable("vtiger_lastModifiedBy".$module)){
$query .= " left join vtiger_users as vtiger_lastModifiedBy".$module." on vtiger_lastModifiedBy".$module.".id = vtiger_crmentity.modifiedby ";
}
$relQuery = $this->getReportsUiType10Query($module,$queryplanner);
$query .= ' '.$relQuery;
return $query;
}
/*
* Function to get the secondary query part of a report
* @param - $module primary module name
* @param - $secmodule secondary module name
* returns the query string formed on fetching the related data for report for secondary module
*/
function generateReportsSecQuery($module,$secmodule,$queryplanner) {
$matrix = $queryplanner->newDependencyMatrix();
$matrix->setDependency("vtiger_crmentityDocuments",array("vtiger_groupsDocuments","vtiger_usersDocuments","vtiger_lastModifiedByDocuments"));
if (!$queryplanner->requireTable('vtiger_notes', $matrix)) {
return '';
}
$matrix->setDependency("vtiger_notes",array("vtiger_crmentityDocuments","vtiger_attachmentsfolder"));
// TODO Support query planner
$query = $this->getRelationQuery($module,$secmodule,"vtiger_notes","notesid", $queryplanner);
$query .= " left join vtiger_notescf on vtiger_notes.notesid = vtiger_notescf.notesid";
if ($queryplanner->requireTable("vtiger_crmentityDocuments",$matrix)){
$query .=" left join vtiger_crmentity as vtiger_crmentityDocuments on vtiger_crmentityDocuments.crmid=vtiger_notes.notesid and vtiger_crmentityDocuments.deleted=0";
}
if ($queryplanner->requireTable("vtiger_attachmentsfolder")){
$query .=" left join vtiger_attachmentsfolder on vtiger_attachmentsfolder.folderid=vtiger_notes.folderid";
}
if ($queryplanner->requireTable("vtiger_groupsDocuments")){
$query .=" left join vtiger_groups as vtiger_groupsDocuments on vtiger_groupsDocuments.groupid = vtiger_crmentityDocuments.smownerid";
}
if ($queryplanner->requireTable("vtiger_usersDocuments")){
$query .=" left join vtiger_users as vtiger_usersDocuments on vtiger_usersDocuments.id = vtiger_crmentityDocuments.smownerid";
}
if ($queryplanner->requireTable("vtiger_lastModifiedByDocuments")){
$query .=" left join vtiger_users as vtiger_lastModifiedByDocuments on vtiger_lastModifiedByDocuments.id = vtiger_crmentityDocuments.modifiedby ";
}
if ($queryplanner->requireTable("vtiger_createdbyDocuments")){
$query .= " left join vtiger_users as vtiger_createdbyDocuments on vtiger_createdbyDocuments.id = vtiger_crmentityDocuments.smcreatorid ";
}
//if secondary modules custom reference field is selected
$query .= parent::getReportsUiType10Query($secmodule, $queryPlanner);
return $query;
}
/*
* Function to get the relation tables for related modules
* @param - $secmodule secondary module name
* returns the array with table names and fieldnames storing relations between module and this module
*/
function setRelationTables($secmodule){
$rel_tables = array();
return $rel_tables[$secmodule];
}
// Function to unlink all the dependent entities of the given Entity by Id
function unlinkDependencies($module, $id) {
global $log;
/*//Backup Documents Related Records
$se_q = 'SELECT crmid FROM vtiger_senotesrel WHERE notesid = ?';
$se_res = $this->db->pquery($se_q, array($id));
if ($this->db->num_rows($se_res) > 0) {
for($k=0;$k < $this->db->num_rows($se_res);$k++)
{
$se_id = $this->db->query_result($se_res,$k,"crmid");
$params = array($id, RB_RECORD_DELETED, 'vtiger_senotesrel', 'notesid', 'crmid', $se_id);
$this->db->pquery('INSERT INTO vtiger_relatedlists_rb VALUES (?,?,?,?,?,?)', $params);
}
}
$sql = 'DELETE FROM vtiger_senotesrel WHERE notesid = ?';
$this->db->pquery($sql, array($id));*/
parent::unlinkDependencies($module, $id);
}
// Function to unlink an entity with given Id from another entity
function unlinkRelationship($id, $return_module, $return_id) {
global $log;
if(empty($return_module) || empty($return_id)) return;
if($return_module == 'Accounts') {
$sql = 'DELETE FROM vtiger_senotesrel WHERE notesid = ? AND (crmid = ? OR crmid IN (SELECT contactid FROM vtiger_contactdetails WHERE accountid=?))';
$this->db->pquery($sql, array($id, $return_id, $return_id));
} else {
$sql = 'DELETE FROM vtiger_senotesrel WHERE notesid = ? AND crmid = ?';
$this->db->pquery($sql, array($id, $return_id));
parent::unlinkRelationship($id, $return_module, $return_id);
}
}
// Function to get fieldname for uitype 27 assuming that documents have only one file type field
function getFileTypeFieldName(){
global $adb,$log;
$query = 'SELECT fieldname from vtiger_field where tabid = ? and uitype = ?';
$tabid = getTabid('Documents');
$filetype_uitype = 27;
$res = $adb->pquery($query,array($tabid,$filetype_uitype));
$fieldname = null;
if(isset($res)){
$rowCount = $adb->num_rows($res);
if($rowCount > 0){
$fieldname = $adb->query_result($res,0,'fieldname');
}
}
return $fieldname;
}
// Function to get fieldname for uitype 28 assuming that doc has only one file upload type
function getFile_FieldName(){
global $adb,$log;
$query = 'SELECT fieldname from vtiger_field where tabid = ? and uitype = ?';
$tabid = getTabid('Documents');
$filename_uitype = 28;
$res = $adb->pquery($query,array($tabid,$filename_uitype));
$fieldname = null;
if(isset($res)){
$rowCount = $adb->num_rows($res);
if($rowCount > 0){
$fieldname = $adb->query_result($res,0,'fieldname');
}
}
return $fieldname;
}
/**
* Check the existence of folder by folderid
*/
function isFolderPresent($folderid) {
global $adb;
$result = $adb->pquery("SELECT folderid FROM vtiger_attachmentsfolder WHERE folderid = ?", array($folderid));
if(!empty($result) && $adb->num_rows($result) > 0) return true;
return false;
}
/**
* Customizing the restore procedure.
*/
function restore($modulename, $id) {
parent::restore($modulename, $id);
global $adb;
$fresult = $adb->pquery("SELECT folderid FROM vtiger_notes WHERE notesid = ?", array($id));
if(!empty($fresult) && $adb->num_rows($fresult)) {
$folderid = $adb->query_result($fresult, 0, 'folderid');
if(!$this->isFolderPresent($folderid)) {
// Re-link to default folder
$adb->pquery("UPDATE vtiger_notes set folderid = 1 WHERE notesid = ?", array($id));
}
}
}
function getQueryByModuleField($module, $fieldname, $srcrecord, $query) {
if($module == "MailManager") {
$tempQuery = split('WHERE', $query);
if(!empty($tempQuery[1])) {
$where = " vtiger_notes.filelocationtype = 'I' AND vtiger_notes.filename != '' AND vtiger_notes.filestatus != 0 AND ";
$query = $tempQuery[0].' WHERE '.$where.$tempQuery[1];
} else{
$query = $tempQuery[0].' WHERE '.$tempQuery;
}
return $query;
}
}
/**
* Function to check the module active and user action permissions before showing as link in other modules
* like in more actions of detail view.
*/
static function isLinkPermitted($linkData) {
$moduleName = "Documents";
if(vtlib_isModuleActive($moduleName) && isPermitted($moduleName, 'CreateView') == 'yes') {
return true;
}
return false;
}
/**
* Function to get query for related list in Documents module
*/
function get_related_list($id, $cur_tab_id, $rel_tab_id) {
$related_module = vtlib_getModuleNameById($rel_tab_id);
$other = CRMEntity::getInstance($related_module);
vtlib_setup_modulevars('Documents', $this);
vtlib_setup_modulevars($related_module, $other);
$returnset = "&return_module=Documents&return_action=CallRelatedList&return_id=".$id;
$query = "SELECT vtiger_crmentity.*, $other->table_name.*";
$userNameSql = getSqlForNameInDisplayFormat(array('first_name'=>'vtiger_users.first_name', 'last_name' => 'vtiger_users.last_name'), 'Users');
if (!empty($other->related_tables)) {
foreach ($other->related_tables as $tname => $relmap) {
$query .= ", $tname.*";
if (empty($relmap[1]))
$relmap[1] = $other->table_name;
if (empty($relmap[2]))
$relmap[2] = $relmap[0];
$more_relation .= " LEFT JOIN $tname ON $tname.$relmap[0] = $relmap[1].$relmap[2]";
}
}
$query .= " FROM $other->table_name";
$query .= " INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = $other->table_name.$other->table_index";
$query .= " INNER JOIN vtiger_senotesrel ON vtiger_senotesrel.crmid = vtiger_crmentity.crmid ".$more_relation;
$query .= " LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid";
$query .= " LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid";
$query .= " WHERE vtiger_crmentity.deleted = 0 AND vtiger_senotesrel.notesid=$id";
//eliminate lead converted
if($related_module == 'Leads') {
$query .= " AND vtiger_leaddetails.converted=0 ";
}
$return_value = GetRelatedList('Documents', $related_module, $other, $query, '', $returnset);
return $return_value;
}
}
?>