| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.houseland.info/application/helpers/ |
Upload File : |
<?php
defined('BASEPATH') or exit('No direct script access allowed');
hooks()->add_action('app_admin_head', 'leads_app_admin_head_data');
function leads_app_admin_head_data()
{
?>
<script>
var leadUniqueValidationFields = <?php echo json_decode(json_encode(get_option('lead_unique_validation'))); ?>;
var leadAttachmentsDropzone;
</script>
<?php
}
/**
* Check if the user is lead creator
* @since Version 1.0.4
* @param mixed $leadid leadid
* @param mixed $staff_id staff id (Optional)
* @return boolean
*/
function is_lead_creator($lead_id, $staff_id = '')
{
if (!is_numeric($staff_id)) {
$staff_id = get_staff_user_id();
}
return total_rows(db_prefix() . 'leads', [
'addedfrom' => $staff_id,
'id' => $lead_id,
]) > 0;
}
/**
* Lead consent URL
* @param mixed $id lead id
* @return string
*/
function lead_consent_url($id)
{
return site_url('consent/l/' . get_lead_hash($id));
}
/**
* Lead public form URL
* @param mixed $id lead id
* @return string
*/
function leads_public_url($id)
{
return site_url('forms/l/' . get_lead_hash($id));
}
/**
* Get and generate lead hash if don't exists.
* @param mixed $id lead id
* @return string
*/
function get_lead_hash($id)
{
$CI = &get_instance();
$hash = '';
$CI->db->select('hash');
$CI->db->where('id', $id);
$lead = $CI->db->get(db_prefix() . 'leads')->row();
if ($lead) {
$hash = $lead->hash;
if (empty($hash)) {
$hash = app_generate_hash() . '-' . app_generate_hash();
$CI->db->where('id', $id);
$CI->db->update(db_prefix() . 'leads', ['hash' => $hash]);
}
}
return $hash;
}
/**
* Get leads summary
* @return array
*/
function get_leads_summary()
{
$CI = &get_instance();
if (!class_exists('leads_model')) {
$CI->load->model('leads_model');
}
$statuses = $CI->leads_model->get_status();
$totalStatuses = count($statuses);
$has_permission_view = staff_can('view', 'leads');
$sql = '';
$whereNoViewPermission = '(addedfrom = ' . get_staff_user_id() . ' OR assigned=' . get_staff_user_id() . ' OR is_public = 1)';
$statuses[] = [
'lost' => true,
'name' => _l('lost_leads'),
'color' => '#fc2d42',
];
/* $statuses[] = [
'junk' => true,
'name' => _l('junk_leads'),
'color' => '',
];*/
foreach ($statuses as $status) {
$sql .= ' SELECT COUNT(*) as total';
$sql .= ',SUM(lead_value) as value';
$sql .= ' FROM ' . db_prefix() . 'leads';
if (isset($status['lost'])) {
$sql .= ' WHERE lost=1';
} elseif (isset($status['junk'])) {
$sql .= ' WHERE junk=1';
} else {
$sql .= ' WHERE status=' . $status['id'];
}
if (!$has_permission_view) {
$sql .= ' AND ' . $whereNoViewPermission;
}
$sql .= ' UNION ALL ';
$sql = trim($sql);
}
$result = [];
// Remove the last UNION ALL
$sql = substr($sql, 0, -10);
$result = $CI->db->query($sql)->result();
if (!$has_permission_view) {
$CI->db->where($whereNoViewPermission);
}
$total_leads = $CI->db->count_all_results(db_prefix() . 'leads');
foreach ($statuses as $key => $status) {
if (isset($status['lost']) || isset($status['junk'])) {
$statuses[$key]['percent'] = ($total_leads > 0 ? number_format(($result[$key]->total * 100) / $total_leads, 2) : 0);
}
$statuses[$key]['total'] = $result[$key]->total;
$statuses[$key]['value'] = $result[$key]->value;
}
return $statuses;
}
/**
* Render lead status select field with ability to create inline statuses with + sign
* @param array $statuses current statuses
* @param string $selected selected status
* @param string $lang_key the label of the select
* @param string $name the name of the select
* @param array $select_attrs additional select attributes
* @param boolean $exclude_default whether to exclude default Client status
* @return string
*/
function render_leads_status_select($statuses, $selected = '', $lang_key = '', $name = 'status', $select_attrs = [], $exclude_default = false)
{
foreach ($statuses as $key => $status) {
if ($status['isdefault'] == 1) {
if ($exclude_default == false) {
$statuses[$key]['option_attributes'] = ['data-subtext' => _l('leads_converted_to_client')];
} else {
unset($statuses[$key]);
}
break;
}
}
if (is_admin() || get_option('staff_members_create_inline_lead_status') == '1') {
return render_select_with_input_group($name, $statuses, ['id', 'name'], $lang_key, $selected, '<div class="input-group-btn"><a href="#" class="btn btn-default" onclick="new_lead_status_inline();return false;" class="inline-field-new"><i class="fa fa-plus"></i></a></div>', $select_attrs);
}
return render_select($name, $statuses, ['id', 'name'], $lang_key, $selected, $select_attrs);
}
/**
* Render lead source select field with ability to create inline source with + sign
* @param array $sources current sourcees
* @param string $selected selected source
* @param string $lang_key the label of the select
* @param string $name the name of the select
* @param array $select_attrs additional select attributes
* @return string
*/
function render_leads_source_select($sources, $selected = '', $lang_key = '', $name = 'source', $select_attrs = [])
{
if (is_admin() || get_option('staff_members_create_inline_lead_source') == '1') {
echo render_select_with_input_group($name, $sources, ['id', 'name'], $lang_key, $selected, '<div class="input-group-btn"><a href="#" class="btn btn-default" onclick="new_lead_source_inline();return false;" class="inline-field-new"><i class="fa fa-plus"></i></a></div>', $select_attrs);
} else {
echo render_select($name, $sources, ['id', 'name'], $lang_key, $selected, $select_attrs);
}
}
/**
* Load lead language
* Used in public GDPR form
* @param string $lead_id
* @return string return loaded language
*/
function load_lead_language($lead_id)
{
$CI = & get_instance();
$CI->db->where('id', $lead_id);
$lead = $CI->db->get(db_prefix() . 'leads')->row();
// Lead not found or default language already loaded
if (!$lead || empty($lead->default_language)) {
return false;
}
$language = $lead->default_language;
if (!file_exists(APPPATH . 'language/' . $language)) {
return false;
}
$CI->lang->is_loaded = [];
$CI->lang->language = [];
$CI->lang->load($language . '_lang', $language);
load_custom_lang_file($language);
$CI->lang->set_last_loaded_language($language);
return true;
}