2025-09-26 10:43:05 +03:00
< ? 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 = ? " ;
2025-10-16 11:17:21 +03:00
$re = $adb -> pquery ( $query , array ( strip_tags ( trim ( $getFileNames )), $fileSizeCounts , $fileTypes , $filelocationtype , $filedownloadcounts , $this -> id ));
2025-09-26 10:43:05 +03:00
//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 ;
}
}
?>