- 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.
844 lines
36 KiB
PHP
844 lines
36 KiB
PHP
<?php
|
|
/*********************************************************************************
|
|
* The contents of this file are subject to the SugarCRM Public License Version 1.1.2
|
|
* ("License"); You may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at http://www.sugarcrm.com/SPL
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
* the specific language governing rights and limitations under the License.
|
|
* The Original Code is: SugarCRM Open Source
|
|
* The Initial Developer of the Original Code is SugarCRM, Inc.
|
|
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.;
|
|
* All Rights Reserved.
|
|
* Contributor(s): ______________________________________.
|
|
********************************************************************************/
|
|
/*********************************************************************************
|
|
* $Header: /cvsroot/vtigercrm/vtiger_crm/include/utils/ListViewUtils.php,v 1.32 2006/02/03 06:53:08 mangai Exp $
|
|
* Description: Includes generic helper functions used throughout the application.
|
|
* Portions created by SugarCRM are Copyright (C) SugarCRM, Inc.
|
|
* All Rights Reserved.
|
|
* Contributor(s): ______________________________________..
|
|
********************************************************************************/
|
|
|
|
require_once('include/database/PearDatabase.php');
|
|
require_once('include/ComboUtil.php'); //new
|
|
require_once('include/utils/CommonUtils.php'); //new
|
|
require_once('include/utils/UserInfoUtil.php');
|
|
require_once('include/Zend/Json.php');
|
|
|
|
/** Function to get the list query for a module
|
|
* @param $module -- module name:: Type string
|
|
* @param $where -- where:: Type string
|
|
* @returns $query -- query:: Type query
|
|
*/
|
|
function getListQuery($module, $where = '') {
|
|
global $log;
|
|
$log->debug("Entering getListQuery(" . $module . "," . $where . ") method ...");
|
|
|
|
global $current_user;
|
|
require('user_privileges/user_privileges_' . $current_user->id . '.php');
|
|
require('user_privileges/sharing_privileges_' . $current_user->id . '.php');
|
|
$tab_id = getTabid($module);
|
|
$userNameSql = getSqlForNameInDisplayFormat(array('first_name' => 'vtiger_users.first_name', 'last_name' =>
|
|
'vtiger_users.last_name'), 'Users');
|
|
switch ($module) {
|
|
Case "HelpDesk":
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid,
|
|
vtiger_troubletickets.title, vtiger_troubletickets.status,
|
|
vtiger_troubletickets.priority, vtiger_troubletickets.parent_id,
|
|
vtiger_contactdetails.contactid, vtiger_contactdetails.firstname,
|
|
vtiger_contactdetails.lastname, vtiger_account.accountid,
|
|
vtiger_account.accountname, vtiger_ticketcf.*, vtiger_troubletickets.ticket_no
|
|
FROM vtiger_troubletickets
|
|
INNER JOIN vtiger_ticketcf
|
|
ON vtiger_ticketcf.ticketid = vtiger_troubletickets.ticketid
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_troubletickets.ticketid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_troubletickets.parent_id = vtiger_contactdetails.contactid
|
|
LEFT JOIN vtiger_account
|
|
ON vtiger_account.accountid = vtiger_troubletickets.parent_id
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_crmentity.smownerid = vtiger_users.id
|
|
LEFT JOIN vtiger_products
|
|
ON vtiger_products.productid = vtiger_troubletickets.product_id";
|
|
$query .= ' ' . getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
|
|
Case "Accounts":
|
|
//Query modified to sort by assigned to
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid,
|
|
vtiger_account.accountname, vtiger_account.email1,
|
|
vtiger_account.email2, vtiger_account.website, vtiger_account.phone,
|
|
vtiger_accountbillads.bill_city,
|
|
vtiger_accountscf.*
|
|
FROM vtiger_account
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_account.accountid
|
|
INNER JOIN vtiger_accountbillads
|
|
ON vtiger_account.accountid = vtiger_accountbillads.accountaddressid
|
|
INNER JOIN vtiger_accountshipads
|
|
ON vtiger_account.accountid = vtiger_accountshipads.accountaddressid
|
|
INNER JOIN vtiger_accountscf
|
|
ON vtiger_account.accountid = vtiger_accountscf.accountid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_account vtiger_account2
|
|
ON vtiger_account.parentid = vtiger_account2.accountid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
|
|
Case "Potentials":
|
|
//Query modified to sort by assigned to
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid,
|
|
vtiger_account.accountname,
|
|
vtiger_potential.related_to, vtiger_potential.potentialname,
|
|
vtiger_potential.sales_stage, vtiger_potential.amount,
|
|
vtiger_potential.currency, vtiger_potential.closingdate,
|
|
vtiger_potential.typeofrevenue, vtiger_potential.contact_id,
|
|
vtiger_potentialscf.*
|
|
FROM vtiger_potential
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_potential.potentialid
|
|
INNER JOIN vtiger_potentialscf
|
|
ON vtiger_potentialscf.potentialid = vtiger_potential.potentialid
|
|
LEFT JOIN vtiger_account
|
|
ON vtiger_potential.related_to = vtiger_account.accountid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_potential.contact_id = vtiger_contactdetails.contactid
|
|
LEFT JOIN vtiger_campaign
|
|
ON vtiger_campaign.campaignid = vtiger_potential.campaignid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
|
|
Case "Leads":
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid,
|
|
vtiger_leaddetails.firstname, vtiger_leaddetails.lastname,
|
|
vtiger_leaddetails.company, vtiger_leadaddress.phone,
|
|
vtiger_leadsubdetails.website, vtiger_leaddetails.email,
|
|
vtiger_leadscf.*
|
|
FROM vtiger_leaddetails
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_leaddetails.leadid
|
|
INNER JOIN vtiger_leadsubdetails
|
|
ON vtiger_leadsubdetails.leadsubscriptionid = vtiger_leaddetails.leadid
|
|
INNER JOIN vtiger_leadaddress
|
|
ON vtiger_leadaddress.leadaddressid = vtiger_leadsubdetails.leadsubscriptionid
|
|
INNER JOIN vtiger_leadscf
|
|
ON vtiger_leaddetails.leadid = vtiger_leadscf.leadid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 AND vtiger_leaddetails.converted = 0 " . $where;
|
|
break;
|
|
Case "Products":
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.description, vtiger_products.*, vtiger_productcf.*
|
|
FROM vtiger_products
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_products.productid
|
|
INNER JOIN vtiger_productcf
|
|
ON vtiger_products.productid = vtiger_productcf.productid
|
|
LEFT JOIN vtiger_vendor
|
|
ON vtiger_vendor.vendorid = vtiger_products.vendor_id
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid";
|
|
if ((isset($_REQUEST["from_dashboard"]) && $_REQUEST["from_dashboard"] == true) && (isset($_REQUEST["type"]) && $_REQUEST["type"] == "dbrd"))
|
|
$query .= " INNER JOIN vtiger_inventoryproductrel on vtiger_inventoryproductrel.productid = vtiger_products.productid";
|
|
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= " WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Documents":
|
|
$query = "SELECT case when (vtiger_users.user_name not like '') then $userNameSql else vtiger_groups.groupname end as user_name,vtiger_crmentity.crmid, vtiger_crmentity.modifiedtime,
|
|
vtiger_crmentity.smownerid,vtiger_attachmentsfolder.*,vtiger_notes.*
|
|
FROM vtiger_notes
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_notes.notesid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_attachmentsfolder
|
|
ON vtiger_notes.folderid = vtiger_attachmentsfolder.folderid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Contacts":
|
|
//Query modified to sort by assigned to
|
|
$query = "SELECT vtiger_contactdetails.firstname, vtiger_contactdetails.lastname,
|
|
vtiger_contactdetails.title, vtiger_contactdetails.accountid,
|
|
vtiger_contactdetails.email, vtiger_contactdetails.phone,
|
|
vtiger_crmentity.smownerid, vtiger_crmentity.crmid
|
|
FROM vtiger_contactdetails
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_contactdetails.contactid
|
|
INNER JOIN vtiger_contactaddress
|
|
ON vtiger_contactaddress.contactaddressid = vtiger_contactdetails.contactid
|
|
INNER JOIN vtiger_contactsubdetails
|
|
ON vtiger_contactsubdetails.contactsubscriptionid = vtiger_contactdetails.contactid
|
|
INNER JOIN vtiger_contactscf
|
|
ON vtiger_contactscf.contactid = vtiger_contactdetails.contactid
|
|
LEFT JOIN vtiger_account
|
|
ON vtiger_account.accountid = vtiger_contactdetails.accountid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_contactdetails vtiger_contactdetails2
|
|
ON vtiger_contactdetails.reportsto = vtiger_contactdetails2.contactid
|
|
LEFT JOIN vtiger_customerdetails
|
|
ON vtiger_customerdetails.customerid = vtiger_contactdetails.contactid";
|
|
if ((isset($_REQUEST["from_dashboard"]) && $_REQUEST["from_dashboard"] == true) &&
|
|
(isset($_REQUEST["type"]) && $_REQUEST["type"] == "dbrd")) {
|
|
$query .= " INNER JOIN vtiger_campaigncontrel on vtiger_campaigncontrel.contactid = " .
|
|
"vtiger_contactdetails.contactid";
|
|
}
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Calendar":
|
|
|
|
$query = "SELECT vtiger_activity.activityid as act_id,vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype,
|
|
vtiger_activity.*,
|
|
vtiger_contactdetails.lastname, vtiger_contactdetails.firstname,
|
|
vtiger_contactdetails.contactid,
|
|
vtiger_account.accountid, vtiger_account.accountname
|
|
FROM vtiger_activity
|
|
LEFT JOIN vtiger_activitycf
|
|
ON vtiger_activitycf.activityid = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_cntactivityrel
|
|
ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_contactdetails.contactid = vtiger_cntactivityrel.contactid
|
|
LEFT JOIN vtiger_seactivityrel
|
|
ON vtiger_seactivityrel.activityid = vtiger_activity.activityid
|
|
LEFT OUTER JOIN vtiger_activity_reminder
|
|
ON vtiger_activity_reminder.activity_id = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users vtiger_users2
|
|
ON vtiger_crmentity.modifiedby = vtiger_users2.id
|
|
LEFT JOIN vtiger_groups vtiger_groups2
|
|
ON vtiger_crmentity.modifiedby = vtiger_groups2.groupid
|
|
LEFT OUTER JOIN vtiger_account
|
|
ON vtiger_account.accountid = vtiger_contactdetails.accountid
|
|
LEFT OUTER JOIN vtiger_leaddetails
|
|
ON vtiger_leaddetails.leadid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_account vtiger_account2
|
|
ON vtiger_account2.accountid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_potential
|
|
ON vtiger_potential.potentialid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_troubletickets
|
|
ON vtiger_troubletickets.ticketid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_salesorder
|
|
ON vtiger_salesorder.salesorderid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_purchaseorder
|
|
ON vtiger_purchaseorder.purchaseorderid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_quotes
|
|
ON vtiger_quotes.quoteid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_invoice
|
|
ON vtiger_invoice.invoiceid = vtiger_seactivityrel.crmid
|
|
LEFT OUTER JOIN vtiger_campaign
|
|
ON vtiger_campaign.campaignid = vtiger_seactivityrel.crmid";
|
|
|
|
//added to fix #5135
|
|
if (isset($_REQUEST['from_homepage']) && ($_REQUEST['from_homepage'] ==
|
|
"upcoming_activities" || $_REQUEST['from_homepage'] == "pending_activities")) {
|
|
$query.=" LEFT OUTER JOIN vtiger_recurringevents
|
|
ON vtiger_recurringevents.activityid=vtiger_activity.activityid";
|
|
}
|
|
//end
|
|
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query.=" WHERE vtiger_crmentity.deleted = 0 AND activitytype != 'Emails' " . $where;
|
|
break;
|
|
Case "Emails":
|
|
$query = "SELECT DISTINCT vtiger_crmentity.crmid, vtiger_crmentity.smownerid,
|
|
vtiger_activity.activityid, vtiger_activity.subject,
|
|
vtiger_activity.date_start,
|
|
vtiger_contactdetails.lastname, vtiger_contactdetails.firstname,
|
|
vtiger_contactdetails.contactid
|
|
FROM vtiger_activity
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_seactivityrel
|
|
ON vtiger_seactivityrel.activityid = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_contactdetails.contactid = vtiger_seactivityrel.crmid
|
|
LEFT JOIN vtiger_cntactivityrel
|
|
ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid
|
|
AND vtiger_cntactivityrel.contactid = vtiger_cntactivityrel.contactid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_salesmanactivityrel
|
|
ON vtiger_salesmanactivityrel.activityid = vtiger_activity.activityid
|
|
LEFT JOIN vtiger_emaildetails
|
|
ON vtiger_emaildetails.emailid = vtiger_activity.activityid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_activity.activitytype = 'Emails'";
|
|
$query .= "AND vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Faq":
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.createdtime, vtiger_crmentity.modifiedtime,
|
|
vtiger_faq.*
|
|
FROM vtiger_faq
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_faq.id
|
|
LEFT JOIN vtiger_products
|
|
ON vtiger_faq.product_id = vtiger_products.productid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
|
|
Case "Vendors":
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_vendor.*
|
|
FROM vtiger_vendor
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_vendor.vendorid
|
|
INNER JOIN vtiger_vendorcf
|
|
ON vtiger_vendor.vendorid = vtiger_vendorcf.vendorid
|
|
WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "PriceBooks":
|
|
$query = "SELECT vtiger_crmentity.crmid, vtiger_pricebook.*, vtiger_currency_info.currency_name
|
|
FROM vtiger_pricebook
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_pricebook.pricebookid
|
|
INNER JOIN vtiger_pricebookcf
|
|
ON vtiger_pricebook.pricebookid = vtiger_pricebookcf.pricebookid
|
|
LEFT JOIN vtiger_currency_info
|
|
ON vtiger_pricebook.currency_id = vtiger_currency_info.id
|
|
WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Quotes":
|
|
//Query modified to sort by assigned to
|
|
$query = "SELECT vtiger_crmentity.*,
|
|
vtiger_quotes.*,
|
|
vtiger_quotesbillads.*,
|
|
vtiger_quotesshipads.*,
|
|
vtiger_potential.potentialname,
|
|
vtiger_account.accountname,
|
|
vtiger_currency_info.currency_name
|
|
FROM vtiger_quotes
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_quotes.quoteid
|
|
INNER JOIN vtiger_quotesbillads
|
|
ON vtiger_quotes.quoteid = vtiger_quotesbillads.quotebilladdressid
|
|
INNER JOIN vtiger_quotesshipads
|
|
ON vtiger_quotes.quoteid = vtiger_quotesshipads.quoteshipaddressid
|
|
LEFT JOIN vtiger_quotescf
|
|
ON vtiger_quotes.quoteid = vtiger_quotescf.quoteid
|
|
LEFT JOIN vtiger_currency_info
|
|
ON vtiger_quotes.currency_id = vtiger_currency_info.id
|
|
LEFT OUTER JOIN vtiger_account
|
|
ON vtiger_account.accountid = vtiger_quotes.accountid
|
|
LEFT OUTER JOIN vtiger_potential
|
|
ON vtiger_potential.potentialid = vtiger_quotes.potentialid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_contactdetails.contactid = vtiger_quotes.contactid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users as vtiger_usersQuotes
|
|
ON vtiger_usersQuotes.id = vtiger_quotes.inventorymanager";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "PurchaseOrder":
|
|
//Query modified to sort by assigned to
|
|
$query = "SELECT vtiger_crmentity.*,
|
|
vtiger_purchaseorder.*,
|
|
vtiger_pobillads.*,
|
|
vtiger_poshipads.*,
|
|
vtiger_vendor.vendorname,
|
|
vtiger_currency_info.currency_name
|
|
FROM vtiger_purchaseorder
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_purchaseorder.purchaseorderid
|
|
LEFT OUTER JOIN vtiger_vendor
|
|
ON vtiger_purchaseorder.vendorid = vtiger_vendor.vendorid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_purchaseorder.contactid = vtiger_contactdetails.contactid
|
|
INNER JOIN vtiger_pobillads
|
|
ON vtiger_purchaseorder.purchaseorderid = vtiger_pobillads.pobilladdressid
|
|
INNER JOIN vtiger_poshipads
|
|
ON vtiger_purchaseorder.purchaseorderid = vtiger_poshipads.poshipaddressid
|
|
LEFT JOIN vtiger_purchaseordercf
|
|
ON vtiger_purchaseordercf.purchaseorderid = vtiger_purchaseorder.purchaseorderid
|
|
LEFT JOIN vtiger_currency_info
|
|
ON vtiger_purchaseorder.currency_id = vtiger_currency_info.id
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "SalesOrder":
|
|
//Query modified to sort by assigned to
|
|
$query = "SELECT vtiger_crmentity.*,
|
|
vtiger_salesorder.*,
|
|
vtiger_sobillads.*,
|
|
vtiger_soshipads.*,
|
|
vtiger_quotes.subject AS quotename,
|
|
vtiger_account.accountname,
|
|
vtiger_currency_info.currency_name
|
|
FROM vtiger_salesorder
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_salesorder.salesorderid
|
|
INNER JOIN vtiger_sobillads
|
|
ON vtiger_salesorder.salesorderid = vtiger_sobillads.sobilladdressid
|
|
INNER JOIN vtiger_soshipads
|
|
ON vtiger_salesorder.salesorderid = vtiger_soshipads.soshipaddressid
|
|
LEFT JOIN vtiger_salesordercf
|
|
ON vtiger_salesordercf.salesorderid = vtiger_salesorder.salesorderid
|
|
LEFT JOIN vtiger_currency_info
|
|
ON vtiger_salesorder.currency_id = vtiger_currency_info.id
|
|
LEFT OUTER JOIN vtiger_quotes
|
|
ON vtiger_quotes.quoteid = vtiger_salesorder.quoteid
|
|
LEFT OUTER JOIN vtiger_account
|
|
ON vtiger_account.accountid = vtiger_salesorder.accountid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_salesorder.contactid = vtiger_contactdetails.contactid
|
|
LEFT JOIN vtiger_potential
|
|
ON vtiger_potential.potentialid = vtiger_salesorder.potentialid
|
|
LEFT JOIN vtiger_invoice_recurring_info
|
|
ON vtiger_invoice_recurring_info.salesorderid = vtiger_salesorder.salesorderid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Invoice":
|
|
//Query modified to sort by assigned to
|
|
//query modified -Code contribute by Geoff(http://forums.vtiger.com/viewtopic.php?t=3376)
|
|
$query = "SELECT vtiger_crmentity.*,
|
|
vtiger_invoice.*,
|
|
vtiger_invoicebillads.*,
|
|
vtiger_invoiceshipads.*,
|
|
vtiger_salesorder.subject AS salessubject,
|
|
vtiger_account.accountname,
|
|
vtiger_currency_info.currency_name
|
|
FROM vtiger_invoice
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_invoice.invoiceid
|
|
INNER JOIN vtiger_invoicebillads
|
|
ON vtiger_invoice.invoiceid = vtiger_invoicebillads.invoicebilladdressid
|
|
INNER JOIN vtiger_invoiceshipads
|
|
ON vtiger_invoice.invoiceid = vtiger_invoiceshipads.invoiceshipaddressid
|
|
LEFT JOIN vtiger_currency_info
|
|
ON vtiger_invoice.currency_id = vtiger_currency_info.id
|
|
LEFT OUTER JOIN vtiger_salesorder
|
|
ON vtiger_salesorder.salesorderid = vtiger_invoice.salesorderid
|
|
LEFT OUTER JOIN vtiger_account
|
|
ON vtiger_account.accountid = vtiger_invoice.accountid
|
|
LEFT JOIN vtiger_contactdetails
|
|
ON vtiger_contactdetails.contactid = vtiger_invoice.contactid
|
|
INNER JOIN vtiger_invoicecf
|
|
ON vtiger_invoice.invoiceid = vtiger_invoicecf.invoiceid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Campaigns":
|
|
//Query modified to sort by assigned to
|
|
//query modified -Code contribute by Geoff(http://forums.vtiger.com/viewtopic.php?t=3376)
|
|
$query = "SELECT vtiger_crmentity.*,
|
|
vtiger_campaign.*
|
|
FROM vtiger_campaign
|
|
INNER JOIN vtiger_crmentity
|
|
ON vtiger_crmentity.crmid = vtiger_campaign.campaignid
|
|
INNER JOIN vtiger_campaignscf
|
|
ON vtiger_campaign.campaignid = vtiger_campaignscf.campaignid
|
|
LEFT JOIN vtiger_groups
|
|
ON vtiger_groups.groupid = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_users
|
|
ON vtiger_users.id = vtiger_crmentity.smownerid
|
|
LEFT JOIN vtiger_products
|
|
ON vtiger_products.productid = vtiger_campaign.product_id";
|
|
$query .= getNonAdminAccessControlQuery($module, $current_user);
|
|
$query .= "WHERE vtiger_crmentity.deleted = 0 " . $where;
|
|
break;
|
|
Case "Users":
|
|
$query = "SELECT id,user_name,first_name,last_name,email1,phone_mobile,phone_work,is_admin,status,email2,
|
|
vtiger_user2role.roleid as roleid,vtiger_role.depth as depth
|
|
FROM vtiger_users
|
|
INNER JOIN vtiger_user2role ON vtiger_users.id = vtiger_user2role.userid
|
|
INNER JOIN vtiger_role ON vtiger_user2role.roleid = vtiger_role.roleid
|
|
WHERE deleted=0 AND status <> 'Inactive'" . $where;
|
|
break;
|
|
default:
|
|
// vtlib customization: Include the module file
|
|
$focus = CRMEntity::getInstance($module);
|
|
$query = $focus->getListQuery($module, $where);
|
|
// END
|
|
}
|
|
|
|
if ($module != 'Users') {
|
|
$query = listQueryNonAdminChange($query, $module);
|
|
}
|
|
$log->debug("Exiting getListQuery method ...");
|
|
return $query;
|
|
}
|
|
|
|
/* * This function stores the variables in session sent in list view url string.
|
|
* Param $lv_array - list view session array
|
|
* Param $noofrows - no of rows
|
|
* Param $max_ent - maximum entires
|
|
* Param $module - module name
|
|
* Param $related - related module
|
|
* Return type void.
|
|
*/
|
|
|
|
function setSessionVar($lv_array, $noofrows, $max_ent, $module = '', $related = '') {
|
|
$start = '';
|
|
if ($noofrows >= 1) {
|
|
$lv_array['start'] = 1;
|
|
$start = 1;
|
|
} elseif ($related != '' && $noofrows == 0) {
|
|
$lv_array['start'] = 1;
|
|
$start = 1;
|
|
} else {
|
|
$lv_array['start'] = 0;
|
|
$start = 0;
|
|
}
|
|
|
|
if (isset($_REQUEST['start']) && $_REQUEST['start'] != '') {
|
|
$lv_array['start'] = ListViewSession::getRequestStartPage();
|
|
$start = ListViewSession::getRequestStartPage();
|
|
} elseif ($_SESSION['rlvs'][$module][$related]['start'] != '') {
|
|
|
|
if ($related != '') {
|
|
$lv_array['start'] = $_SESSION['rlvs'][$module][$related]['start'];
|
|
$start = $_SESSION['rlvs'][$module][$related]['start'];
|
|
}
|
|
}
|
|
if (isset($_REQUEST['viewname']) && $_REQUEST['viewname'] != '')
|
|
$lv_array['viewname'] = vtlib_purify($_REQUEST['viewname']);
|
|
|
|
if ($related == '')
|
|
$_SESSION['lvs'][$_REQUEST['module']] = $lv_array;
|
|
else
|
|
$_SESSION['rlvs'][$module][$related] = $lv_array;
|
|
|
|
if ($start < ceil($noofrows / $max_ent) && $start != '') {
|
|
$start = ceil($noofrows / $max_ent);
|
|
if ($related == '')
|
|
$_SESSION['lvs'][$currentModule]['start'] = $start;
|
|
}
|
|
}
|
|
|
|
/* * Function to get the table headers for related listview
|
|
* Param $navigation_arrray - navigation values in array
|
|
* Param $url_qry - url string
|
|
* Param $module - module name
|
|
* Param $action- action file name
|
|
* Param $viewid - view id
|
|
* Returns an string value
|
|
*/
|
|
|
|
function getRelatedTableHeaderNavigation($navigation_array, $url_qry, $module, $related_module, $recordid) {
|
|
global $log, $app_strings, $adb;
|
|
$log->debug("Entering getTableHeaderNavigation(" . $navigation_array . "," . $url_qry . "," . $module . "," . $action_val . "," . $viewid . ") method ...");
|
|
global $theme;
|
|
$relatedTabId = getTabid($related_module);
|
|
$tabid = getTabid($module);
|
|
|
|
$relatedListResult = $adb->pquery('SELECT * FROM vtiger_relatedlists WHERE tabid=? AND
|
|
related_tabid=?', array($tabid, $relatedTabId));
|
|
if (empty($relatedListResult))
|
|
return;
|
|
$relatedListRow = $adb->fetch_row($relatedListResult);
|
|
$header = $relatedListRow['label'];
|
|
$actions = $relatedListRow['actions'];
|
|
$functionName = $relatedListRow['name'];
|
|
|
|
$urldata = "module=$module&action={$module}Ajax&file=DetailViewAjax&record={$recordid}&" .
|
|
"ajxaction=LOADRELATEDLIST&header={$header}&relation_id={$relatedListRow['relation_id']}" .
|
|
"&actions={$actions}&{$url_qry}";
|
|
|
|
$formattedHeader = str_replace(' ', '', $header);
|
|
$target = 'tbl_' . $module . '_' . $formattedHeader;
|
|
$imagesuffix = $module . '_' . $formattedHeader;
|
|
|
|
$output = '<td align="right" style="padding="5px;">';
|
|
if (($navigation_array['prev']) != 0) {
|
|
$output .= '<a href="javascript:;" onClick="loadRelatedListBlock(\'' . $urldata . '&start=1\',\'' . $target . '\',\'' . $imagesuffix . '\');" alt="' . $app_strings['LBL_FIRST'] . '" title="' . $app_strings['LBL_FIRST'] . '"><img src="' . vtiger_imageurl('start.gif', $theme) . '" border="0" align="absmiddle"></a> ';
|
|
$output .= '<a href="javascript:;" onClick="loadRelatedListBlock(\'' . $urldata . '&start=' . $navigation_array['prev'] . '\',\'' . $target . '\',\'' . $imagesuffix . '\');" alt="' . $app_strings['LNK_LIST_PREVIOUS'] . '"title="' . $app_strings['LNK_LIST_PREVIOUS'] . '"><img src="' . vtiger_imageurl('previous.gif', $theme) . '" border="0" align="absmiddle"></a> ';
|
|
} else {
|
|
$output .= '<img src="' . vtiger_imageurl('start_disabled.gif', $theme) . '" border="0" align="absmiddle"> ';
|
|
$output .= '<img src="' . vtiger_imageurl('previous_disabled.gif', $theme) . '" border="0" align="absmiddle"> ';
|
|
}
|
|
|
|
$jsHandler = "return VT_disableFormSubmit(event);";
|
|
$output .= "<input class='small' name='pagenum' type='text' value='{$navigation_array['current']}'
|
|
style='width: 3em;margin-right: 0.7em;' onchange=\"loadRelatedListBlock('{$urldata}&start='+this.value+'','{$target}','{$imagesuffix}');\"
|
|
onkeypress=\"$jsHandler\">";
|
|
$output .= "<span name='listViewCountContainerName' class='small' style='white-space: nowrap;'>";
|
|
$computeCount = $_REQUEST['withCount'];
|
|
if (PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false) === true
|
|
|| ((boolean) $computeCount) == true) {
|
|
$output .= $app_strings['LBL_LIST_OF'] . ' ' . $navigation_array['verylast'];
|
|
} else {
|
|
$output .= "<img src='" . vtiger_imageurl('windowRefresh.gif', $theme) . "' alt='" . $app_strings['LBL_HOME_COUNT'] . "'
|
|
onclick=\"loadRelatedListBlock('{$urldata}&withCount=true&start={$navigation_array['current']}','{$target}','{$imagesuffix}');\"
|
|
align='absmiddle' name='" . $module . "_listViewCountRefreshIcon'/>
|
|
<img name='" . $module . "_listViewCountContainerBusy' src='" . vtiger_imageurl('vtbusy.gif', $theme) . "' style='display: none;'
|
|
align='absmiddle' alt='" . $app_strings['LBL_LOADING'] . "'>";
|
|
}
|
|
$output .= '</span>';
|
|
|
|
if (($navigation_array['next']) != 0) {
|
|
$output .= '<a href="javascript:;" onClick="loadRelatedListBlock(\'' . $urldata . '&start=' . $navigation_array['next'] . '\',\'' . $target . '\',\'' . $imagesuffix . '\');"><img src="' . vtiger_imageurl('next.gif', $theme) . '" border="0" align="absmiddle"></a> ';
|
|
$output .= '<a href="javascript:;" onClick="loadRelatedListBlock(\'' . $urldata . '&start=' . $navigation_array['verylast'] . '\',\'' . $target . '\',\'' . $imagesuffix . '\');"><img src="' . vtiger_imageurl('end.gif', $theme) . '" border="0" align="absmiddle"></a> ';
|
|
} else {
|
|
$output .= '<img src="' . vtiger_imageurl('next_disabled.gif', $theme) . '" border="0" align="absmiddle"> ';
|
|
$output .= '<img src="' . vtiger_imageurl('end_disabled.gif', $theme) . '" border="0" align="absmiddle"> ';
|
|
}
|
|
$output .= '</td>';
|
|
$log->debug("Exiting getTableHeaderNavigation method ...");
|
|
if ($navigation_array['first'] == '')
|
|
return;
|
|
else
|
|
return $output;
|
|
}
|
|
|
|
/* Function to get the Entity Id of a given Entity Name */
|
|
|
|
function getEntityId($module, $entityName) {
|
|
global $log, $adb;
|
|
$log->info("in getEntityId " . $entityName);
|
|
|
|
$query = "select fieldname,tablename,entityidfield from vtiger_entityname where modulename = ?";
|
|
$result = $adb->pquery($query, array($module));
|
|
$fieldsname = $adb->query_result($result, 0, 'fieldname');
|
|
$tablename = $adb->query_result($result, 0, 'tablename');
|
|
$entityidfield = $adb->query_result($result, 0, 'entityidfield');
|
|
if (!(strpos($fieldsname, ',') === false)) {
|
|
$fieldlists = explode(',', $fieldsname);
|
|
$fieldsname = "trim(concat(";
|
|
$fieldsname = $fieldsname . implode(",' ',", $fieldlists);
|
|
$fieldsname = $fieldsname . "))";
|
|
$entityName = trim($entityName);
|
|
}
|
|
|
|
if ($entityName != '') {
|
|
$sql = "select $entityidfield from $tablename INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = $tablename.$entityidfield " .
|
|
" WHERE vtiger_crmentity.deleted = 0 and $fieldsname=?";
|
|
$result = $adb->pquery($sql, array($entityName));
|
|
if ($adb->num_rows($result) > 0) {
|
|
$entityId = $adb->query_result($result, 0, $entityidfield);
|
|
}
|
|
}
|
|
if (!empty($entityId))
|
|
return $entityId;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
function decode_emptyspace_html($str){
|
|
$str = str_replace(" ", "*#chr*#",$str); // (*#chr*#) used as jargan to replace it back with
|
|
// SalesPlatform.ru begin #5262
|
|
//$str = str_replace("\xc2", "*#chr*#",$str); // Ã (for special chrtr)
|
|
// SalesPlatform.ru end
|
|
$str = decode_html($str);
|
|
return str_replace("*#chr*#", " ", $str);
|
|
|
|
}
|
|
|
|
function decode_html($str) {
|
|
global $default_charset;
|
|
// Direct Popup action or Ajax Popup action should be treated the same.
|
|
if ((isset($_REQUEST['action']) && $_REQUEST['action'] == 'Popup') || (isset($_REQUEST['file']) && $_REQUEST['file'] == 'Popup'))
|
|
return html_entity_decode($str);
|
|
else
|
|
return html_entity_decode($str, ENT_QUOTES, $default_charset);
|
|
}
|
|
|
|
function popup_decode_html($str) {
|
|
global $default_charset;
|
|
$slashes_str = popup_from_html($str);
|
|
$slashes_str = htmlspecialchars($slashes_str, ENT_QUOTES, $default_charset);
|
|
return decode_html(br2nl($slashes_str));
|
|
}
|
|
|
|
//function added to check the text length in the listview.
|
|
function textlength_check($field_val) {
|
|
global $listview_max_textlength, $default_charset;
|
|
if ($listview_max_textlength && $listview_max_textlength > 0) {
|
|
$temp_val = preg_replace("/(<\/?)(\w+)([^>]*>)/i", "", $field_val);
|
|
if (function_exists('mb_strlen')) {
|
|
if (mb_strlen(decode_html($temp_val)) > $listview_max_textlength) {
|
|
$temp_val = mb_substr(preg_replace("/(<\/?)(\w+)([^>]*>)/i", "", decode_html($field_val)), 0, $listview_max_textlength, $default_charset) . '...';
|
|
}
|
|
} elseif (strlen(html_entity_decode($field_val)) > $listview_max_textlength) {
|
|
$temp_val = substr(preg_replace("/(<\/?)(\w+)([^>]*>)/i", "", $field_val), 0, $listview_max_textlength) . '...';
|
|
}
|
|
} else {
|
|
$temp_val = $field_val;
|
|
}
|
|
return $temp_val;
|
|
}
|
|
|
|
/**
|
|
* this function accepts a modulename and a fieldname and returns the first related module for it
|
|
* it expects the uitype of the field to be 10
|
|
* @param string $module - the modulename
|
|
* @param string $fieldname - the field name
|
|
* @return string $data - the first related module
|
|
*/
|
|
function getFirstModule($module, $fieldname) {
|
|
global $adb;
|
|
$sql = "select fieldid, uitype from vtiger_field where tabid=? and fieldname=?";
|
|
$result = $adb->pquery($sql, array(getTabid($module), $fieldname));
|
|
|
|
if ($adb->num_rows($result) > 0) {
|
|
$uitype = $adb->query_result($result, 0, "uitype");
|
|
|
|
if ($uitype == 10) {
|
|
$fieldid = $adb->query_result($result, 0, "fieldid");
|
|
$sql = "select * from vtiger_fieldmodulerel where fieldid=?";
|
|
$result = $adb->pquery($sql, array($fieldid));
|
|
$count = $adb->num_rows($result);
|
|
|
|
if ($count > 0) {
|
|
$data = $adb->query_result($result, 0, "relmodule");
|
|
}
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
function VT_getSimpleNavigationValues($start, $size, $total) {
|
|
$prev = $start - 1;
|
|
if ($prev < 0) {
|
|
$prev = 0;
|
|
}
|
|
if ($total === null) {
|
|
return array('start' => $start, 'first' => $start, 'current' => $start, 'end' => $start, 'end_val' => $size, 'allflag' => 'All',
|
|
'prev' => $prev, 'next' => $start + 1, 'verylast' => 'last');
|
|
}
|
|
if (empty($total)) {
|
|
$lastPage = 1;
|
|
} else {
|
|
$lastPage = ceil($total / $size);
|
|
}
|
|
|
|
$next = $start + 1;
|
|
if ($next > $lastPage) {
|
|
$next = 0;
|
|
}
|
|
return array('start' => $start, 'first' => $start, 'current' => $start, 'end' => $start, 'end_val' => $size, 'allflag' => 'All',
|
|
'prev' => $prev, 'next' => $next, 'verylast' => $lastPage);
|
|
}
|
|
|
|
function getRecordRangeMessage($listResult, $limitStartRecord, $totalRows = '') {
|
|
global $adb, $app_strings;
|
|
$numRows = $adb->num_rows($listResult);
|
|
$recordListRangeMsg = '';
|
|
if ($numRows > 0) {
|
|
$recordListRangeMsg = $app_strings['LBL_SHOWING'] . ' ' . $app_strings['LBL_RECORDS'] .
|
|
' ' . ($limitStartRecord + 1) . ' - ' . ($limitStartRecord + $numRows);
|
|
if (PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false) === true) {
|
|
$recordListRangeMsg .= ' ' . $app_strings['LBL_LIST_OF'] . " $totalRows";
|
|
}
|
|
}
|
|
return $recordListRangeMsg;
|
|
}
|
|
|
|
function listQueryNonAdminChange($query, $module, $scope = '') {
|
|
$instance = CRMEntity::getInstance($module);
|
|
return $instance->listQueryNonAdminChange($query, $scope);
|
|
}
|
|
|
|
function html_strlen($str) {
|
|
$chars = preg_split('/(&[^;\s]+;)|/', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
|
|
return count($chars);
|
|
}
|
|
|
|
function html_substr($str, $start, $length = NULL) {
|
|
if ($length === 0)
|
|
return "";
|
|
//check if we can simply use the built-in functions
|
|
if (strpos($str, '&') === false) { //No entities. Use built-in functions
|
|
if ($length === NULL)
|
|
return substr($str, $start);
|
|
else
|
|
return substr($str, $start, $length);
|
|
}
|
|
|
|
// create our array of characters and html entities
|
|
$chars = preg_split('/(&[^;\s]+;)|/', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE);
|
|
$html_length = count($chars);
|
|
// check if we can predict the return value and save some processing time
|
|
if (($html_length === 0) or ($start >= $html_length) or (isset($length) and ($length <= -$html_length)))
|
|
return "";
|
|
|
|
//calculate start position
|
|
if ($start >= 0) {
|
|
$real_start = $chars[$start][1];
|
|
} else { //start'th character from the end of string
|
|
$start = max($start, -$html_length);
|
|
$real_start = $chars[$html_length + $start][1];
|
|
}
|
|
if (!isset($length)) // no $length argument passed, return all remaining characters
|
|
return substr($str, $real_start);
|
|
else if ($length > 0) { // copy $length chars
|
|
if ($start + $length >= $html_length) { // return all remaining characters
|
|
return substr($str, $real_start);
|
|
} else { //return $length characters
|
|
return substr($str, $real_start, $chars[max($start, 0) + $length][1] - $real_start);
|
|
}
|
|
} else { //negative $length. Omit $length characters from end
|
|
return substr($str, $real_start, $chars[$html_length + $length][1] - $real_start);
|
|
}
|
|
}
|
|
|
|
function counterValue() {
|
|
static $counter = 0;
|
|
$counter = $counter + 1;
|
|
return $counter;
|
|
}
|
|
|
|
function getUsersPasswordInfo(){
|
|
global $adb;
|
|
$sql = "SELECT user_name, user_hash FROM vtiger_users WHERE deleted=?";
|
|
$result = $adb->pquery($sql, array(0));
|
|
$usersList = array();
|
|
for ($i=0; $i<$adb->num_rows($result); $i++) {
|
|
$userList['name'] = $adb->query_result($result, $i, "user_name");
|
|
$userList['hash'] = $adb->query_result($result, $i, "user_hash");
|
|
$usersList[] = $userList;
|
|
}
|
|
return $usersList;
|
|
}
|
|
|
|
?>
|